Java 如何在单词之间拆分具有不同字符的字符串?
我目前有一个程序,它将一组值从hashmap传递到另一个类,该类将它们存储为字符串。字符串中存储的信息如下所示:Java 如何在单词之间拆分具有不同字符的字符串?,java,string,split,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=25
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.):
我第一次尝试拆分每个字符串,但由于在设置颜色值的字符串的最后一部分有“=”和“,”,所以它会变得一团糟
我也尝试了StringTokenizer(),但最后一部分也遇到了问题
是否有更简单或有效的方法根据需要拆分这些字符串?欢迎提出任何建议
提前感谢您的时间,如果需要代码,请告诉我
编辑:
我已经通过从hashmaps正确地传递参数修复了我的特殊问题
public MultiMap stationmap = new MultiHashMap( );
public Collection getkeyValues(String s) {
Collection values = (Collection) stationmap.get(s);
return values;
}
通过这种方式,我可以将这个集合传递给我需要它们的类,并且我可以进一步迭代它以获得键的值
我将保留此选项,因为进一步的答案可能会帮助有类似字符串问题的人 如果控制字符串的格式,则可以将其格式化并在其中使用解析。如果控制字符串的格式,您可以将它们格式化为格式并在其中使用解析。我不知道您为什么以这种方式工作:)另一个类接受HashMap并以同样的方式处理它不是更容易吗?如果将其输出到文件,则可以将其序列化;hashmaps是可序列化的。我不知道您为什么以这种方式工作:)另一个类接受HashMap并以同样的方式处理它不是更容易吗?如果将其输出到文件,则可以将其序列化;哈希图是可序列化的。使用谷歌的库番石榴:
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;
}
publicstaticlist转换器列表(stringstr){
List List=Lists.newArrayList(Splitter.on(CharMatcher.anyOf(“=[,”))).ommitEmptyStrings().trimResults().limit(7.split(str));
/**
返回:
1号站
1.
任务1
10
假的
0
java.awt.Color[r=255,g=0,b=0]]
*/
int lastIndex=list.size()-1;
字符串last=list.get(lastIndex);
String amendvalue=last.substring(0,last.length()-1);
list.set(lastIndex,amendValue);
//将最后一个元素“java.awt.Color[r=255,g=0,b=0]]”转换为“java.awt.Color[r=255,g=0,b=0]”
退货清单;
}
或:
公共静态列表转换器列表2(字符串str){
str=str.substring(0,str.length()-1);
return Lists.newArrayList(Splitter.on(CharMatcher.anyOf(“=[,”)).ommitEmptyStrings().trimResults().limit(7.split(str));
}
使用谷歌的图书馆番石榴:
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;
}
publicstaticlist转换器列表(stringstr){
List List=Lists.newArrayList(Splitter.on(CharMatcher.anyOf(“=[,”))).ommitEmptyStrings().trimResults().limit(7.split(str));
/**
返回:
1号站
1.
任务1
10
假的
0
java.awt.Color[r=255,g=0,b=0]]
*/
int lastIndex=list.size()-1;
字符串last=list.get(lastIndex);
String amendvalue=last.substring(0,last.length()-1);
list.set(lastIndex,amendValue);
//将最后一个元素“java.awt.Color[r=255,g=0,b=0]]”转换为“java.awt.Color[r=255,g=0,b=0]”
退货清单;
}
或:
公共静态列表转换器列表2(字符串str){
str=str.substring(0,str.length()-1);
return Lists.newArrayList(Splitter.on(CharMatcher.anyOf(“=[,”)).ommitEmptyStrings().trimResults().limit(7.split(str));
}
听起来正则表达式比简单拆分更适合这里,特别是如果字符串总是符合唯一的模式。但是,如果您可以更改它的存储方式,使用更固有的可序列化方式(例如XML或JSON)会让你的生活更轻松。谢谢你的回答!我已经用hashmaps方法解决了我的问题,但会编辑我的问题以进行解释。通常最好保持问题不变,只回答你自己的问题,而不是将你的解决方案放入问题中。我明白,但我解决问题的方式并不现实y match作为类似问题(处理字符串)的答案,因为这只是一个错误使用哈希映射引起的问题。我希望我说得清楚,谢谢你的回答。好吧,是和否。我实际上认为“不要使用字符串,而是传递集合本身”这是对你问题的一个很好的回答。你的第一句话(我第一次错过了)这两个状态都在同一个程序中。但我也看到了你的观点,即它没有直接解决字符串问题…听起来正则表达式比简单拆分更适合这里,特别是如果字符串总是符合唯一的模式。但是,如果你能改变它的存储方式,使用更固有的可序列化的东西(如XML或JSON)会让你的生活更轻松。谢谢你的回答!我已经用hashmaps方法解决了我的问题,但会编辑我的问题以进行解释。通常最好保持问题不变,只回答你自己的问题,而不是将你的解决方案放入问题中。我明白,但我解决问题的方式并不现实y match作为类似问题(处理字符串)的答案,因为这只是一个错误使用哈希映射引起的问题。我希望我说得清楚,谢谢你的回答。好吧,是和否。我实际上认为“不要使用字符串,而是传递集合本身”这是对你问题的一个很好的回答。你的第一句话(我第一次错过了这句话)说明这两个都在同一个程序中。但我也明白你的观点,它没有直接解决字符串问题…谢谢你的回答。我已经解决了我的问题w
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));
}