Java正则表达式打印?性格
我有下面的代码,我正试图从文件“file.txt”中提取所有数据。当前此文件只有一行:Java正则表达式打印?性格,java,regex,Java,Regex,我有下面的代码,我正试图从文件“file.txt”中提取所有数据。当前此文件只有一行: id-123:value 123 package demo; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.P
id-123:value 123
package demo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class s {
public static void main(String[] args) throws Exception {
final String regex = ":[^\\d].*";
File file = new File("C:\\Users\\user\\Desktop\\file.txt");
String text, id;
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
text = line.replaceAll("(^id-\\d*):+", "");
id = line.replaceAll(":\\S.*", "");
System.out.println(text);
System.out.println(id);
}
}
}
我能够读取文件并正确获取此行,但当我在console上打印它时,我会得到以下输出:
?id-123:value 123
?id-123
问号是从哪里来的?文本文件保存为UTF-8文件,读取也是UTF-8。试图在eclipse中运行它
另外,在运行这行代码时,我得到了正确的输出值123:
System.out.println(string.replaceAll("(^id-\\d*):+", ""));
但从文件中读取同一行的同一正则表达式时,它会打印:
?id-123:value 123
问号是从哪里来的
您的编辑器似乎以“UTF-8 with BOM”编码保存了您的文件。例如,在记事本++编辑器中,可以指定编码“UTF-8无BOM”,然后将不显示问号
有关详细信息:
ï»
。BOM字符的唯一用途是向解析器或任何需要的源发出“我是unicode编码的文本流”的信号,或者该流是从包含可选BOM的流转换而来的
您可以阅读更多关于BOM的信息。此外,Aleksey帖子中的相关问题也是一本不错的读物
在您的情况下,您可以简单地使用一个巧妙的技巧使程序工作。这不是最好的解决方案,但也不是最坏的
由于BOM字符仅附加在文件的开头,因此您可以简单地检查行是否以BOM字符&65279
、\uFEFF
、0xFEFF
等开头
if (line.startsWith("\uFEFF")) {
line = line.substring(1);
}
这将从行中删除该字符。此外,它仅仅取决于您用来查看文本的编辑器。智能编辑器只会忽略BOM表
更多好书: