Java 如何检查包含特殊字符的行?
您好,我有一个存储在Linux系统中的文件,其中包含一个特殊字符^C 大概是这样的: ABCDEF^CIJKLMN 现在我需要用java读取这个文件,并检测是否有^C来进行拆分。 问题是在UNIX中无法读取文件。我必须使用cat-v文件名才能在其他地方看到特殊的字符^C,我看不到它。 这是我的示例代码Java 如何检查包含特殊字符的行?,java,utf-8,special-characters,inputstream,nio,Java,Utf 8,Special Characters,Inputstream,Nio,您好,我有一个存储在Linux系统中的文件,其中包含一个特殊字符^C 大概是这样的: ABCDEF^CIJKLMN 现在我需要用java读取这个文件,并检测是否有^C来进行拆分。 问题是在UNIX中无法读取文件。我必须使用cat-v文件名才能在其他地方看到特殊的字符^C,我看不到它。 这是我的示例代码 InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(this),
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(this),
Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(inputStreamReader);
String line;
while ((line = br.readLine()) != null) {
if (line.contains("^C")) {
String[] split = line.split("\\" + sepRecord);
System.out.println(split);
}
您正在检查该行是否包含字符串“^C”,而不是字符“^C”(对应于
0x03
,或\u0003
)。您应该搜索字符0x03
。下面是一个适用于您的案例的代码示例:
byte[] fileContent = new byte[] {'A', 0x03, 'B'};
String fileContentStr = new String (fileContent);
System.out.println (fileContentStr.contains ("^C")); // false
System.out.println (fileContentStr.contains (String.valueOf ((char) 0x03))); // true
System.out.println (fileContentStr.contains ("\u0003")); // true, thanks to @Thomas Fritsch for the precision
String[] split = fileContentStr.split ("\u0003");
System.out.println (split.length); // 2
System.out.println (split[0]); // A
System.out.println (split[1]); // B
^C
字符显示在中,必须解释为单个字符。您正在检查该行是否包含字符串“^C”,而不是字符“^C”(对应于0x03
或\u0003
)。您应该搜索字符0x03
。下面是一个适用于您的案例的代码示例:
byte[] fileContent = new byte[] {'A', 0x03, 'B'};
String fileContentStr = new String (fileContent);
System.out.println (fileContentStr.contains ("^C")); // false
System.out.println (fileContentStr.contains (String.valueOf ((char) 0x03))); // true
System.out.println (fileContentStr.contains ("\u0003")); // true, thanks to @Thomas Fritsch for the precision
String[] split = fileContentStr.split ("\u0003");
System.out.println (split.length); // 2
System.out.println (split[0]); // A
System.out.println (split[1]); // B
^C
字符显示在中,必须解释为单个字符。“^C”只是字符的表示形式。这并不是一个带“C”的插入符号。您必须使用其Unicode代码。您没有提到什么是sepRecord
。此外,不能直接使用println
打印数组。您必须使用数组。toString
。特殊字符是控制键的快捷键,对吗?检查ascii码。是94。让我知道too@v0ld3m0rt在这种情况下,这是完全错误的。插入符号(^
)不是文件中的单个字符,但^C
是用插入符号表示的控制字符。看到我的答案了吗?“^C”只是角色的一种表示。这并不是一个带“C”的插入符号。您必须使用其Unicode代码。您没有提到什么是sepRecord
。此外,不能直接使用println
打印数组。您必须使用数组。toString
。特殊字符是控制键的快捷键,对吗?检查ascii码。是94。让我知道too@v0ld3m0rt在这种情况下,这是完全错误的。插入符号(^
)不是文件中的单个字符,但^C
是用插入符号表示的控制字符。查看我的答案。您只需使用“\u0003”
@ThomasFritsch True,而不是String.valueOf((char)0x03)
,我已经用您的评论更新了我的答案,谢谢提醒!您只需使用“\u0003”
@ThomasFritsch True,而不是String.valueOf((char)0x03)
,我已经用您的评论更新了我的答案,谢谢提醒!