处理由管道分隔的记录的有效方法?

时间:2012-01-03 00:49:28

标签: java

我有一个字符串,其中包含由pipe(|)

连接的数据

示例:5 | aa@gmail.com | 477 | en | 87477

该字符串有~15个由管道连接的字段。

某些字段可能包含空数据: 示例:5 | aa@gmail.com |||| 87477

如何有效地获取Java 1.6中的所有单个字段?

谢谢!

5 个答案:

答案 0 :(得分:3)

考虑使用java提供的Split方法

String str = "5|aa@gmail.com|477|en|87477";
String[] data = str.split("\\|");
for(String s : data){
    System.out.println(s);
}

我得到的输出是

5
aa@gmail.com
477
en
87477

因为它只是一个字符串数组,您可以根据需要访问数据,即数据[1]给出aa@gmail.com

答案 1 :(得分:1)

我赞成String.split答案,因为它最简单。它的两个缺点是:

  1. 使用正则表达式而不是仅仅找到一个char;一般化的额外开销
  2. 每次都必须重新编译正则表达式模式
  3. 要稍微增加,如果需要,可以预先编译模式,然后使用它进行拆分:

    import java.util.regex.Pattern;
    private static final Pattern BAR_REGEX = Pattern.compile( Pattern.quote("|") );
    

    然后在你的方法中:

    String[] splits = BAR_REGEX.split( inputString );
    

答案 2 :(得分:1)

您可能还需要考虑来自StringUtilsApache Commons Lang课程。非常快,确实处理'缺失'令牌。

答案 3 :(得分:1)

Alan的解决方案大部分时间都会有效,除非你最后有空令牌。例如,

  

String str =“5 | aa@gmail.com | 477 | en |||| 87477 || x |||”;

你可以通过

解决这个问题
  • 使用另一种分割变量,其值为负值(参见javadoc
  

String str =“5 | aa@gmail.com | 477 | en |||| 87477 || x |||”;

     

str.split(“\\ |”, - 1);

  • 或使用commons.StringUtils.splitPreserveAllTokens(str,delim)

答案 4 :(得分:0)

考虑使用StringTokenizer类。