有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

只能识别CR LF的java扫描程序

我正在使用scanner类读取文件。我希望我的下线分隔符是CR LF,但文件中有一些记录只有LF,因此我的扫描仪正在读取LF并转到下一行。我希望扫描器只有在遇到这两种情况时才能转到下一行
下面是我的代码片段:(在正则表达式中使用双斜杠也会得到相同的结果)

java.util.Scanner sMain = new java.util.Scanner(inputStream,encoding)
                              .useDelimiter(Pattern.compile("[\r\n]"));
while (sMain.hasNextLine()) {  
// sysout line  
}

共 (3) 个答案

  1. # 1 楼答案

    所以你需要一个分隔符

    "\r\n"
    

    "[\r\n]"表示\r或\n中的一个

    分隔符确定“单词”之间的分隔符。要拆分该行,可以使用split(“~”),如下所示

    ByteArrayInputStream inputStream = new ByteArrayInputStream((
            "a line~with a \r and~a \n in it \r\n" +
            "a line with \n\r in~it\r\n").getBytes());
    
    Scanner sMain = new Scanner(inputStream,"UTF-8").useDelimiter("\r\n");
    Pattern wordPattern = Pattern.compile("~");
    while (sMain.hasNext()) {
        String line = sMain.next();
        line = line.replaceAll("\r", "\\\\r").replaceAll("\n", "\\\\n");
        String[] words = wordPattern.split(line);
        System.out.println(Arrays.toString(words));
    }
    

    印刷品

    [a line, with a \r and, a \n in it ]
    [a line with \n\r in, it]
    
  2. # 2 楼答案

    可能是扫描后打印的。问题不在于正则表达式。彼得是对的: 以下是正确的:

    "\r\n"
    

    但请记住,如果打印,单个\n或\r仍被视为换行符。因此,它可能会显示为更多行。以下测试代码对此进行了说明:

    public class ScannerTest {
    
     public static void main(String[] args) {
       Scanner sc = new Scanner("I am first \r\n I am second \n Am I? \r Really?");
       sc.useDelimiter(Pattern.compile("\r\n"));
       int count=0;
       while (sc.hasNext()) {
              count++;
              System.out.println(sc.next());      
       }
    
       System.out.println("Total No of Lines:"+count);
    
       }
    
    } 
    

    请注意,扫描仪读取的行数为2

  3. # 3 楼答案

    Try(\r\n|\r|\n),正则表达式引擎默认值首先尝试匹配第一个选项