`
king520
  • 浏览: 174699 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
文章分类
社区版块
存档分类
最新评论

java使用String.split方法时遇到的问题(转载)

 
阅读更多

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

今天在使用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语句里的"/"搞混,特用"\\"作转义符。
Backslashes within string literals in Java source code are int434reted as required by the Java Language Specification as either Unicode escapes or other character escapes. It is therefore necessary to double backslashes in string literals that represent regular expressions to protect them from int434retation by the Java bytecode compiler. The string literal "/b", for example, matches a single backspace character when int434reted as a regular expression, while "\\b" matches a word boundary. The string literal "/(hello/)" is illegal and leads to a compile-time error; in order to match the string (hello) the string literal "\\(hello\\)" must be used.


分享到:
评论

相关推荐

    String.split()方法使用总结

    在Java编程语言中,`String.split()`方法是一个非常实用且强大的工具,用于将字符串分割成字符串数组,基于正则表达式或指定的分隔符。这个方法为处理文本数据提供了极大的灵活性,尤其在解析CSV文件、配置文件或者...

    JAVA String.format方法使用介绍

    在JDK1.5中,String类增加了一个非常有用的静态函数format(String format, Objece... argues),可以将各类数据格式化为字符串并输出。其中format参数指定了输出的格式,是最复杂也是最难掌握的一点,而argues则是一...

    5.javaString类.zip

    5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5....

    Java中String.split()用法小结

    Java中的`String.split()`方法是用于将一个字符串按照指定的分隔符进行切割,返回一个字符串数组。这个方法是基于正则表达式的,因此在处理某些特殊字符时需要注意字符的转义。 1. **基本用法** `String.split()`...

    java的String[] split 示例

    在Java编程语言中,`String`类提供了许多用于操作字符串的方法,其中之一便是`split`方法。这个方法在处理文本数据时极为有用,特别是在需要根据特定的分隔符将字符串分割成多个子串的情况下。下面,我们将深入探讨`...

    83.java中String构造方法.zip

    83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中...

    85.java中String构造方法.zip

    85.java中String构造方法.zip85.java中String构造方法.zip85.java中String构造方法.zip85.java中String构造方法.zip85.java中String构造方法.zip85.java中String构造方法.zip85.java中String构造方法.zip85.java中...

    String类的intern、split方法

    String类的intern、split方法 String 类的 intern 方法是一个本地方法,定义如下:public native String intern();该方法返回一个字符串对象的内部化引用,由 String 类维护一个初始为空的字符串的对象池,当 ...

    java.lang.NumberFormatException For inputstring 4294967295处理方法

    在Java编程中,`java.lang.NumberFormatException`是一个常见的运行时异常,它通常发生在尝试将一个字符串转换为数值类型(如int、long、float或double)时,但该字符串无法被解析为有效的数值。"For input string: ...

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

    总结来说,Java的`String.split()`方法在处理结尾空字符串时,可能因为默认行为而丢失这部分内容。为了避免这种情况,可以使用`split(regex, -1)`形式的重载方法,确保所有的子字符串,包括结尾的空字符串,都能被...

    java中String类型转换方法.pdf

    Java 中 String 类型转换方法 Java 中 String 类型转换方法是一种常见的编程操作,涉及到各种数据类型之间的转换,包括整型、浮点型、长整型、浮点型等。本文将详细介绍 Java 中 String 类型转换方法的各种形式。 ...

    power-split:有时string.split()还不够!

    它提供了一些实用程序方法来解决一些用例,而这些用例String.split()调用将无法解决。它能做什么? 使用正则表达式分割字符串,非常明显! 参见PowerSplit.split() 使用正则表达式分割字符串,以提供有关每个元素的...

    JAVA String转化成java.sql.date和java.sql.time方法示例

    "JAVA String转化成java.sql.date和java.sql.time方法示例" JAVA String转化成java.sql.date和java.sql.time方法示例是Java开发中常见的操作,下面我们将详细介绍这两个方法的实现过程。 java.sql.Date和java.util...

    java.io.CharConversionException: isHexDigit处理

    Java.io.CharConversionException: isHexDigit 是 Java 中一种常见的异常,通常发生在传输数据时编码不正确或 URL 传值时出现问题。本文将对该异常进行详细分析,介绍导致该异常的原因和解决方法。 一、问题描述 ...

    java 中String.equals和==的比较

    String.equals() 是 Java 中 String 类的方法,用于比较字符串的内容是否相等。该方法会比较字符串的每个字符是否相同,包括大小写。如果两个字符串的内容相同,那么 equals() 方法将返回 true,否则返回 false。 =...

    Java类库复习——java.lang.String

    `String`类与`StringBuilder`和`StringBuffer`的区别在于,后两者是可变的,适合在循环中进行字符串拼接,因为每次调用`+`运算符或`concat()`方法时,`String`都会创建新的对象,这在大量操作时可能会导致性能下降。...

    C# 中string.split用法详解

    第一种方法 string s=abcdeabcdeabcde; string[] sArray=s.Split...使用另一种构造方法对多个字 符进行分割: string s=abcdeabcdeabcde; string[] sArray1=s.Split(new char[3]{'c','d','e'}) ; foreach(string i in

    Java字符串分隔方法split实践

    `split()`方法位于`java.lang.String`类中,它的基本语法如下: ```java public String[] split(String regex) ``` 这里的`regex`参数是一个正则表达式,用于定义分隔字符串的规则。正则表达式是一种强大的文本...

    String1.java

    ### Java字符串操作详解:String1.java程序分析 在Java编程语言中,字符串处理是一项非常重要的技能,无论是进行数据处理还是用户交互,字符串都是一个不可或缺的数据类型。本篇将基于提供的`String1.java`代码示例...

Global site tag (gtag.js) - Google Analytics