如何在单词之间拆分不同字符的字符串?

时间:2012-08-09 03:08:12

标签: java string split

我目前有一个程序,它将一个值集合从一个hashmap传递给另一个将它们存储为字符串的类。存储在字符串中的信息是这样的:

Station 1=[1, Task 1, 10, false, 0, java.awt.Color[r=255,g=0,b=0]]
Station 2=[2, Task 2, 10, false, 0, java.awt.Color[r=0,g=0,b=255]]
Station 3=[3, Task 3, 10, false, 0, java.awt.Color[r=0,g=255,b=0]]
Station 4=[4, Task 4, 10, false, 0, java.awt.Color[r=255,g=200,b=0]]
Station 5=[5, Task 5, 10, false, 0, java.awt.Color[r=0,g=0,b=0]]

我正试图将它们分成(f.e。):

Station 1
1
Task 1
10
false
0
java.awt.Color[r=255,g=0,b=0]

我首先尝试拆分每个字符串但是因为字符串的最后一部分有“=”和“,”设置了颜色值,它会搞得一团糟。

我也尝试过StringTokenizer()但我在最后一部分也遇到了问题。

是否有更简单有效的方法根据需要拆分这些字符串?欢迎任何建议!

提前感谢您的时间,如果需要代码,请告诉我们!

修改

我通过正确地从哈希映射传递参数来修复我的特定问题。

public MultiMap stationmap = new MultiHashMap( );

public Collection getkeyValues(String s) {
   Collection values = (Collection) stationmap.get(s);
   return values;
}

这样,我可以将这个集合传递给我需要它们的类,我可以进一步迭代它以获取键的值。

我将保持开放,因为进一步的答案可能会帮助有类似字符串问题的人!

3 个答案:

答案 0 :(得分:1)

如果您正在控制字符串的格式,可以将它们格式化为json并在那里使用解析。

答案 1 :(得分:1)

我不确定你为什么以这种方式工作:)另一个类是否更容易接受HashMap并以同样的方式处理它?如果您将其输出到文件,则可以将其序列化; hashmaps是可序列化的。

答案 2 :(得分:1)

使用google的库 guava

public static List<String> convertToList(String str) {
    List<String> list = Lists.newArrayList(Splitter.on(CharMatcher.anyOf("=[,")).omitEmptyStrings().trimResults().limit(7).split(str));
    /**
     Returns:
            Station 1
            1
            Task 1
            10
            false
            0
            java.awt.Color[r=255,g=0,b=0]]
             */


    int lastIndex = list.size() - 1;
    String last = list.get(lastIndex);
    String amendedValue = last.substring(0, last.length()-1);
    list.set(lastIndex, amendedValue);
    // Convert the last element "java.awt.Color[r=255,g=0,b=0]]" to  "java.awt.Color[r=255,g=0,b=0]"


    return list;
}

或者:

public static List<String> convertToList2(String str) {
    str = str.substring(0, str.length()-1);
    return Lists.newArrayList(Splitter.on(CharMatcher.anyOf("=[,")).omitEmptyStrings().trimResults().limit(7).split(str));
}