Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查包含特殊字符的行?_Java_Utf 8_Special Characters_Inputstream_Nio - Fatal编程技术网

Java 如何检查包含特殊字符的行?

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),

您好,我有一个存储在Linux系统中的文件,其中包含一个特殊字符^C 大概是这样的:

ABCDEF^CIJKLMN 现在我需要用java读取这个文件,并检测是否有^C来进行拆分。 问题是在UNIX中无法读取文件。我必须使用cat-v文件名才能在其他地方看到特殊的字符^C,我看不到它。 这是我的示例代码

    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)
,我已经用您的评论更新了我的答案,谢谢提醒!