检查Java中的转义字符

时间:2016-12-16 20:38:13

标签: java char escaping

我有一个逗号分隔的文件,对于某些行有"\N"。我需要加载所有行并跳过所有不包含\N的行。 我试图做以下但它不起作用。

if (!line.contains("\\N")) {
    //do load here
}

上面的代码仍然从下面的csv传递:

1,text,abc,\N,23,56

然后我们有NumberFormatException(它应该是Int Value)。 为什么会这样?

1 个答案:

答案 0 :(得分:0)

如果您只想处理包含 \ N 的文件行,请忽略 if 语句条件中的(感叹号)字符。这是 NOT 标志。

你现在基本上说的是:

  

如果当前文本文件行包含在字符串变量中   不包含 \ N ,然后执行 if 语句块中的代码。

仅当提供的条件为布尔 true 时,才会执行

IF 语句。申请!如果提供的条件为 NOT true ,则flag基本上将条件设置为 true This可以为您提供更多帮助。

如果您只想要那些包含 \ N 的行,那么您的代码应如下所示:

if (line.contains("\\N")) {
    //process line here
}

如果您不要想要处理包含 \ N 的文件行,那么您现在使用的 工作正常。

关于你的问题:

  

然后我们有NumberFormatException(它应该是Int Value)。   为什么会这样?

\ n (小写字母n)通常是一个标记,它在字符串中应用以在处理时强制使用新行,如果使用大写字母N则不执行此操作。一般来说,很多CSV文件使用 \ N 来表示 NULL ,而其他人只是放置任何内容,只是分隔符。您需要查看创建CSV文件的内容,以找出为什么的实际原因,因为他们可能会将其用于其他内容,但现在您可以将其视为 NULL 。整数变量永远不会为空,默认情况下它们将被视为包含0,因此您可以将代码更改为:

if (line.contains("\\N") { line = line.replace("\\N", "0"); }

然而,您可能会遇到 \ N ,其中应该有一个字符串,所以上面的行对你没有好处。一种解决方案是在拆分文件行后处理每个数组元素内容中的 \ N (应该在那里),例如:

String csvFilePath = "MyCSVfile.txt"; // assuming file is in classpath
try (BufferedReader br = new BufferedReader(new FileReader("MyCSVfile.txt"))) {
    int j = 0; //used as a counter
    String line = "";
    while ((line = br.readLine()) != null) {
        j++; //increment counter
        String[] data = line.split(",");
        //if the ID value contains null then apply the counter (j) value.
        int id = Integer.parseInt(data[0].replace("\\N",String.valueOf(j)));
        String type = data[1].replace("\\N","");
        String text = data[2].replace("\\N","");
        int value1 = Integer.parseInt(data[3].replace("\\N","0"));
        int value2 = Integer.parseInt(data[4].replace("\\N","0"));
        int value3 = Integer.parseInt(data[5].replace("\\N","0"));
        System.out.println("ID is:\t\t" + id + "\nData Type is:\t" + type + 
                           "\nText is:\t" + text + "\nValue 1 is:\t" + value1 + 
                           "\nValue 2 is:\t" + value2 + "\nValue 3 is:\t" + 
                           value3 + "\n");
    }
    br.close();
} 
catch (IOException ex) { 
    //however you want to handle exception
}

无论在任何一个CSV文件行中遇到什么位置,都会处理 \ N 标记。