`

使用String.split方法时遇到的问题

    博客分类:
  • java
阅读更多

      今天在使用String.split()方法时因为使用"|"作分割符,总是得不到结果。于是在网上Google了一下,终于找到了答案。


      在使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。
我们看jdk doc中说明
public String[] split(String regex)
Splits this string around matches of the given regular expression.
      参数regex是一个 regular-expression的匹配模式而不是一个简单的String,他对一些特殊的字符可能会出现你预想不到的结果,比如测试下面的代码:
用竖线 | 分隔字符串,你将得不到预期的结果
  String[] aa = "aaa|bbb|ccc".split("|");
  //String[] aa = "aaa|bbb|ccc".split("\\|"); 这样才能得到正确的结果
  for (int i = 323 ; i <aa.length ; i++ ) {
    System.out.println("--"+aa);
  }
用 * 分隔字符串运行将抛出java.util.regex.PatternSyntaxException异常,用加号 + 也是如此。
  String[] aa = "aaa*bbb*ccc".split("*");
  //String[] aa = "aaa|bbb|ccc".split("\\*"); 这样才能得到正确的结果  
  for (int i = 323 ; i <aa.length ; i++ ) {
    System.out.println("--"+aa);
  }
显然,+ * 不是有效的模式匹配规则表达式,用"\\*" "\\+"转义后即可得到正确的结果。
"|" 分隔串时虽然能够执行,但是却不是预期的目的,"\\|"转义后即可得到正确的结果。
还有如果想在串中使用"\"字符,则也需要转义.首先要表达"aaaa\bbbb"这个串就应该用"aaaa\\bbbb",如果要分隔就应该这样才能得到正确结果:
String[] aa = "aaa\\bbb\\bccc".split("
\\\\");

另在JDK API里找到此段说明,大意是为了防止正则表达式里的转义符与java语句里的"\"搞混,特用"\\"作转义符。


分享到:
评论

相关推荐

    浅谈java String.split丢失结尾空字符串的问题

    然而,有时候开发者可能会遇到一个问题,即使用`split()`时,结尾的空字符串可能会丢失。这个问题在标题和描述中已经明确指出,现在我们将深入探讨这个问题及其解决方案。 首先,让我们看一个简单的例子: ```java ...

    asp.net下String.prototype.split()的兼容问题

    `String.prototype.split()`函数是JavaScript中的一个关键方法,用于将字符串分割成数组,根据提供的分隔符进行切割。然而,在不同浏览器,尤其是IE浏览器的不同版本之间,这个函数的行为可能会有所差异,这给开发者...

    用string拆分字符串.zip

    在这个例子中,我们创建了一个辅助函数`split`,它使用`std::getline`读取字符串直到遇到分隔符。 4. **JavaScript中的字符串拆分** JavaScript的`String.split()`方法与Python和Java类似: ```javascript let s = ...

    pb分割字符串,自己写的split()方法

    通过本文的介绍,我们可以看到,在PB环境中自定义`split()`方法不仅能够解决实际开发中遇到的问题,而且其设计简洁实用,易于理解和使用。这种方法不仅可以提高开发效率,还能帮助开发者更好地组织和处理数据。希望...

    第十五章 .NET编程经验分享.docx

    当遇到需要使用特殊字符或者多个字符作为分隔符的情况时,可以借助正则表达式库(RegEx)的`Split`方法。如示例所示,`RegEx.Split`允许我们使用任意正则表达式模式作为分隔符,如在`"||"`分隔的字符串中,可以使用`...

    c++builder 中的split

    为了解决这一问题,本文将详细介绍如何在C++Builder中实现一个简单的`Split`函数,并通过示例代码展示其使用方法。 #### 分割字符串的基本概念 在处理文本数据时,经常需要将一个较长的字符串分割成多个子串,以便...

    十大常见Java String问题_动力节点Java学院整理

    String类的split()方法使用正则表达式来分割字符串。为了匹配空白字符,可以使用"\s+",但由于Java的字面量转义,实际传入的参数应该是"\\s+"。 6. **substring()方法的工作原理** 在JDK 6中,substring()方法...

    StringUtil(通过的字符处理工具类)

    对于多个字符串的连接,除了使用`+`操作符外,`StringUtil`提供了`join()`方法,它可以更高效地将字符串数组合并成一个字符串,尤其是在处理大量数据时。 3. **字符串分割** `split()`方法允许我们将字符串按照...

    C#优化字符串操作

    - `Int32.Parse`方法在遇到无法转换的字符串时,会抛出`FormatException`异常,确保了数据转换的准确性,但增加了程序的脆弱性。 - `Int32.TryParse`是两者的折衷,它不会抛出异常,而是通过返回一个布尔值表示...

    javascript 取Url参数和去掉字符串前后空格方法

    - 遍历参数字符串数组,使用`split`方法将每个元素按照等号(`=`)分割成键值对。 - 将键转换为小写形式存储到对象中,以避免大小写不一致导致的问题。 4. **返回参数值**: - 通过传入的参数名从`paramObj`对象...

    以任意指定的字符分割一个字符串,然后保存在字符串数组中

    在实际应用中,你可能会遇到更复杂的场景,比如处理多字符分隔符、忽略空格、处理转义字符等,这些都是在字符串处理时需要考虑的问题。通过熟悉这些基础知识,你可以更有效地处理各种字符串处理任务。

    JavaScript常用字符串与数组扩展函数小结_.docx

    这些自定义方法不仅可以提高代码的可读性和可维护性,还能帮助我们解决实际开发中遇到的问题。当然,在实际应用中还需要根据具体需求选择合适的方法,并注意可能的安全风险,例如XSS攻击等。希望这些扩展函数能够为...

    javascript中不易分清的slice,splice和split三个函数_.docx

    在JavaScript中,数组和字符串操作中常常会遇到一些相似但功能各异的方法,其中`slice`、`splice`和`split`就是三个容易混淆的函数。接下来我们将深入理解它们的用法和区别。 **1. `slice()`** `slice()`方法主要...

    java正则表达式匹配全角空格

    - **Java中的String类方法**:除了`split()`方法外,String类还提供了许多其他有用的方法,如`matches()`、`replace()`等,这些方法都可以帮助我们在处理字符串时更加灵活。 #### 七、总结 本文介绍了如何使用Java...

    android字串的拆分问题

    在Android开发中,字符串(String)是经常被使用的数据类型,特别是在处理用户界面、网络通信以及数据存储时。本文将深入探讨“android字串的拆分问题”,并提供相关的解决方案。 字符串拆分是处理文本数据时的一项...

    C#常用代码收藏

    - **字符串分割**:使用 `String.Split()` 方法来分割字符串。 ```csharp string sentence = "Hello,C#,World"; string[] words = sentence.Split(','); ``` #### 2. 数组和集合操作 数组和集合是C#编程中非常...

    java 中用split分割字符串,最后的空格等不被拆分的方法

    当你遇到上述问题,即最后一个字段后面有多个连续的制表符,但这些空格或制表符没有被正确拆分,你可以通过向 `split()` 方法传递一个额外的参数来解决这个问题: ```java String[] values = line.split("\t", -1);...

Global site tag (gtag.js) - Google Analytics