java - 从 List<String> Java 解析

标签 java list parsing arraylist

我正在尝试解析列表中元素的值,声明如下:

 List<String> uniqueList = new ArrayList<String>(dupMap.values());

这些值是这样的:

a:1-2
b:3-5

但我想要一个带有第一个数字(即 1、3)的 ArrayList,另一个带有第二个数字(即 2、5)。我已经解决了......有点:

String delims= "\t"; String delim2= ":"; String delim3= "-";
String splits2[]; String splits3[]; String splits4[];
Map<String,String> dupMap = new TreeMap<String, String>();
List<String> uniqueList = new ArrayList<String>(dupMap.values());
ArrayList<String> parsed2 = new ArrayList<String>();
ArrayList<String> parsed3 = new ArrayList<String>();
ArrayList<String> parsed3two= new ArrayList<String>();
double uniques = uniqueList.size();
for(int a=0;a<uniques;a++){
    //this doesn't work like it would for an ArrayList
    splits2 = uniqueList.split(delim2) ;
    parsed2.add(splits2[1]);
    for(int q=0; q<splits2.length; q++){
        String change2 = splits2[q];
        if(change2.length()>2){
           splits3 = change2.split(delim3);
           parsed3.add(splits3[0]);
           String change3=splits3[q];
           if (change3.length()>2){
               splits4 = change3.split(delims);
               parsed3two.add(splits4[0]);
           }
        }
     }
  }

uniqueList.split 不起作用,但我不知道 List 是否有类似的功能。有什么建议吗?

最佳答案

如果您知道所有数据的格式为 [something]:[num]-[num],则可以使用如下正则表达式:

Pattern p = Pattern.compile("^([^:]*):([^-]*)-([^-]*)$");

// I assume this holds all the values:
List<String> uniqueList = new ArrayList<String>(dupMap.values()); 

for (String src : uniqueList) {
    Matcher m = p.matcher(src); 
    if( m.find() && m.groupCount() >= 3) {
        String firstValue = m.group(1); // value to left of :
        String secondValue = m.group(2); // value between : and -
        String thirdValue = m.group(3); // value after -

        // assign to arraylists here
    }
}

我实际上并没有将代码添加到特定的 ArrayList 中,因为我无法从您的代码中完全分辨出哪个 ArrayList 应该保存哪个值。

编辑

根据 Code-Guru 的评论,使用 String.split() 的实现将如下所示:

String pattern = "[:\\-]";

// I assume this holds all the values:
List<String> uniqueList = new ArrayList<String>(dupMap.values()); 

for (String src : uniqueList) {
    String[] parts = src.split(pattern);
    if (parts.length == 3) {
        String firstValue = parts[1]; // value to left of :
        String secondValue = parts[2]; // value between : and -
        String thirdValue = parts[3]; // value after -

        // assign to arraylists here
    }
}

两种方法在效率方面几乎相同。

关于java - 从 List<String> Java 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12184616/

相关文章:

java - 是否有用于 GWT 的漂亮的 CSS 主题?

java - 通过注释单独排除某些情况的验证

java - 将 hibernate-validator 与 wicket 集成

jquery/css 将列表更改为下拉列表

prolog - 了解 Prolog 列表

python - 将元组列表拆分为同一元组字段的子列表

java - Perl 兼容正则表达式引擎 : how implemented?

Python 拆分字符串

java - 测试方法传递空指针异常

python - 为 Python 中的类别查询解析 DMOZ 转储