2012-08-09 106 views
0

我目前有一个程序将一个哈希值的值集合传递给另一个将它们存储为字符串的类。存储在字符串中的信息是这样:如何将字符串与不同字符之间的字符串拆分?

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]] 

,我试图将它们分成(FE):

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

我第一次尝试分割每个字符串但也有“= “和”,“在设置了颜色值的字符串的最后部分,它会变得混乱起来。

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

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

在此先感谢您的时间,让我知道是否需要代码!

编辑:

我已经从包含HashMap正确地传递参数固定我的具体问题。

public MultiMap stationmap = new MultiHashMap(); 

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

这样一来,我可以在此集合传递到哪里,我需要他们的课,我可以通过它进一步迭代,以获取值的键。

我会离开这个打开,因为进一步的答案可能会帮助有类似字符串问题的人!

+1

听起来像一个正则表达式将在这里更好的匹配比简单的分裂,特别是如果字符串总是适合一个独特的模式。但是,如果您可以更改存储方式,那么使用更固有的可串行化(例如XML或JSON)会让您的生活更轻松。 – 2012-08-09 03:12:09

+0

感谢您的回答!我用hashmaps方法解决了我的问题,但会编辑我的问题来解释。 – 2012-08-09 03:19:49

+1

通常情况下最好不要将问题保持原样,而只是简单回答自己的问题,而不是将解决方案置于问题中。请参阅http://meta.stackexchange.com/questions/17845/etiquette-for-answering-your-own-question – 2012-08-09 03:25:07

回答

1

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

+0

谢谢你的回答。我已经用地图方法解决了我的问题,但是会让我的问题处于打开状态,并对其进行编辑以解释我如何修复它。 – 2012-08-09 03:20:32

1

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

1

使用谷歌的图书馆番石榴

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)); 
}