当前位置: 首页 > 面试题库 >

为什么String.split需要使用管道定界符进行转义?

益英逸
2023-03-14
问题内容

我试图解析一个文件,该文件的每一行都用管道定界值。当我没有在split方法中转义管道定界符时,它不能正常工作,但是在我如下转义管道后,它却可以正常工作。

private ArrayList<String> parseLine(String line) {
    ArrayList<String> list = new ArrayList<String>();
    String[] list_str = line.split("\\|"); // note the escape "\\" here
    System.out.println(list_str.length);
    System.out.println(line);
    for(String s:list_str) {
        list.add(s);
        System.out.print(s+ "|");
    }
    return list;
}

有人可以解释为什么该split()方法需要转义管道字符吗?


问题答案:

String.split需要一个正则表达式参数。未转义的|被解析为正则表达式,表示“空字符串或空字符串”,这不是您的意思。



 类似资料:
  • 使用 san-store 进行应用状态管理,就要先接受它的理念: 单向流 全局唯一的应用状态源 状态更新模式单一,不能通过store直接更新应用状态 那么,使用 san-store 进行应用状态管理,和自己在组件里完成所有事情,有什么区别呢? 自己管理你的应用状态 自己在组件里完成所有事情,意味着你需要自己管理你的应用状态。经验丰富的开发人员能够凭着设计经验和直觉让应用良构,但在不断的迭代与新需求

  • 问题内容: 我有一个〜8GB的大文本文件,我需要进行一些简单的过滤,然后对所有行进行排序。我使用的是28核计算机,具有SSD和128GB RAM。我努力了 方法1 方法2 令人惊讶的是,方法1仅需11.5分钟,而方法2仅需(0.75 + 1 <2)分钟。为什么通过管道传输时排序如此缓慢?它不是平行的吗? 编辑 而且并不重要,这个实验可以简单地通过使用(由于@Sergei Kurenkov)而重复进

  • 问题内容: 我想根据所有可能的分隔符(例如逗号,冒号,半冒号,句号,空格,hihenhen等)来解析整个文件。 假设我有一个假设的字符串行“ Hi,X How-how are:any you?” 我应该得到带有项目Hi,X,How,how,are,any和you的输出数组。 如何在String.split方法中指定所有这些定界符? 提前致谢。 问题答案: 接受一个正则表达式,在这种情况下,您希望将

  • 问题内容: 也许我的问题是新手,但是我真的无法理解在什么情况下使用junit? 无论是编写简单的应用程序还是大型应用程序,我都使用语句对其进行测试,这对我来说很容易。 如果仍然需要调用相同的方法,检查它们返回的内容,然后又要为所有内容添加注释,那么为什么要使用JUnit创建测试类,在项目中创建不必要的文件夹呢? 为什么不编写一个类并立即对其进行测试而不创建Test-class? PS。我从未在刚刚

  • 问题内容: 如何在不删除定界符的情况下拆分字符串? 假设我有一个字符串: 当我这样做时 ,我得到的是这样的: 但我想得到这个: 当我尝试执行“ split2”功能时,我都陷入了splice()和索引以及“ this” vs“ that”和… aargh的纠结之中!帮帮我!:D 问题答案: 尝试这个: 将所有“ d”实例替换为“,d” 用“,”分隔 var string = “abcdeabcde”

  • 在《计算机系统程序员的观点》(2.3.5)一书中,计算二的补码乘法的方法描述如下: C中的有符号乘法通常是通过将2w位乘积截断为w位来执行的。将二补码数截断为w位相当于首先计算其取模2w的值,然后从无符号转换为二补码。 因此,对于相似的位级操作数,为什么无符号乘法不同于二的补乘法?为什么两个补乘法需要进行符号扩展? 为了计算无符号和二补加法的相同位级表示,我们可以转换二补的参数,然后执行无符号加法