使用文件时出现Java问题

时间:2014-10-09 17:41:00

标签: java string replace replaceall

我在尝试从字符串中删除子序列\u000时遇到了一些问题。

首先,我通过String str = new String(bytes, "UTF8");将文件中的bytes []读入字符串,然后我得到等于str的{​​{1}},这意味着\u0004Word4Word是单词4的长度。所以现在我需要将它转换为常规Word4WordsreplaceAll("\u000", "");等不起作用。怎么做?

replaceALL("\\\\u000", "")

UPDATE! 首先,我用void FillingStorage() throws Exception{ Path path = Paths.get(System.getProperty("db.file"));//that's my file byte[] data = Files.readAllBytes(path); String str = new String(data, "UTF8"); System.out.println(str); String res = str.replaceAll("I don't know what to write here cos nothing I've tried works"); return; } 填充我的HashMap。然后我把它作为字节写在文件中。 因此,当我尝试将其转换回字符串并打印时,我看到:Key -> Value and Key1 -> Value1而不是Key Value Key1 Value1。但令人惊讶的是,如果你查看我打印的字符串,你会看到像这样的字符:3Key 5Value 4Key1 6Value1所以看起来我的字符串包含这些数字,但java无法打印它们。

这是我在文件中写入字节的方式:

\u0003Key \u0005Value etc...

1 个答案:

答案 0 :(得分:1)

首先,您的要求不会要求使用正则表达式,因此您应该使用replace()代替。

其次,\uxxxx是Java中的字符文字语法,因此您实际上并不清楚实际上是否有字符\ u 0 0 {你的字符串中的{1}};你的字节数组只是以单字节等于4开始,这就是字符串长度,这更合乎逻辑。

在这种情况下,您应该在转换为0时使用接受Stringoffset参数的构造函数丢弃数组中的初始字节。

如果您确实在字符串中包含了所有这些字符,那么只需使用len来删除最初的6个字符应该就是您所需要的。