【问题标题】:Using \t regex with Scanner input [duplicate]使用带有扫描仪输入的 \t 正则表达式 [重复]
【发布时间】:2017-06-18 09:55:12
【问题描述】:
String[] splitUp = line.split("\t");

这是代码,字符串是 "John Doe 3.30 23123123" 问题出现在 Doe 的末尾,在 3.30 之后,这些空格实际上是制表符。现在我必须用制表符分割这个字符串,而 \t 和 \t 不起作用。帮助

这里有更多代码:

while(scan.hasNextLine()){


          String line = scan.nextLine();
          String[] splitUp = line.split("\\t");
          for(int i = 0; i < splitUp.length; i++){
              System.out.println(splitUp[i]);
          }

}

我有一个文本文件,它与制表符成行。

答案:

如果使用 java 编译器 IntelliJ 编辑 .txt 文件,则它将 \t 字符替换为相应数量的空格,因此您无法检查 \t 因为它不存在。您必须在常规文本编辑器中对其进行编辑,一切都会好起来的。

【问题讨论】:

    标签: java arrays regex string split


    【解决方案1】:

    在java中你需要\\t来转义\

    以下代码有效:

    String test="asd    asd asd xsdv";
    String[]t=test.split("\\t");
    for(String st : t){
        System.out.println(st);
    }
    

    输出是:

    asd
    asd
    asd xsdv
    

    【讨论】:

    • String[] splitUp = line.split("\\t");所以这个?
    • 是的,应该是这样
    • 不,仍然没有拆分
    • 我用一些有效的测试代码更新了我的答案
    • 我的输出没有拆分
    【解决方案2】:

    你可以使用它然后保存每个组 => 数组

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    final String regex = "(\\w+\\s\\w+|\\d+.\\d+)";
    final String string = "John Doe 3.30    23123123";
    
    final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
    final Matcher matcher = pattern.matcher(string);
    
    while (matcher.find()) {
        System.out.println("Full match: " + matcher.group(0));
        for (int i = 1; i <= matcher.groupCount(); i++) {
            System.out.println("Group " + i + ": " + matcher.group(i));
        }
    }
    

    输入:

    John Doe    3.30    23123123
    

    输出:

    John Doe
    3.30
    23123123
    

    见:https://regex101.com/r/Us6G3X/1

    【讨论】:

    • 您的正则表达式仅适用于您的示例。如果字符串发生变化会发生什么?
    猜你喜欢
    • 2015-06-26
    • 2020-12-14
    • 2014-10-31
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多