我遇到问题的人是我有这样的输入: -
:21:ARI
:22:萨钦
:23:维鲁
危险
:25:sevi
我必须以21匹配到ari的方式分割,我通过使用行分割器来分割整个输入。但我不能将值危险与我的代码在下面的标记23匹配,任何一个都有不同的逻辑请帮忙: -
foreach (KeyValuePair<string, int> item in dictAndNames)
{
Console.Write(item.Key+"=>" + item.Value.ToString());
}
答案 0 :(得分:1)
您的exapmle的预期行为是什么? 23应该对应2个值 - “病毒”和“危险”吗?
我可以建议标记+数据的每个片段通过字符“\ n:”的组合与明显的片段分开;并且每个标签可以有多个以“\ n”分隔的数据元素。
如果这是真的,那么您可以修改您的splittng代码,如下所示,它应该工作
String tempString = sb.toString().substring(1); // Remove first colon
System.out.println("\nInitial string before splitting = " + tempString);
String[] tok = tempString.split("\n:"); // Split by new line and colon
System.out.println("\ntok.length = " + tok.length);
System.out.println("\nArray after splitting of initial string = " + Arrays.toString(tok));
for(String string:tok){
System.out.println("\nStarting to match values for string = " + string);
if(string.contains(":")){
int last=string.lastIndexOf(':');
String tag=string.substring(0,last);
String[] data=string.substring(last+1).split("\n");
System.out.println("tag = " + tag + ", data = " + Arrays.toString(data));
}else{
System.out.println("String \"" + string + "\" does not contain ':' character.");
}
}
答案 1 :(得分:0)
如果您期望多行数据,请分开&#34; \ n:&#34;并使用正则表达式
String[] tok = sb.toString().split("\n:");
Pattern p = Pattern.compile(":?(.*):(.*)", Pattern.DOTALL);
for(String string:tok){
Matcher matcher = p.matcher(string);
if (matcher.matches()) {
String tag = matcher.group(1);
String data = matcher.group(2);
System.out.println(tag+"_"+data);
}
}
答案 2 :(得分:0)
得到了家伙感谢大家的宝贵建议
public class HelloWorld{
public static void main(String []args){
StringBuilder sb=new StringBuilder();
sb.append(":20:akshay");
sb.append("\n");
sb.append(":21:ari");
sb.append("\n");
sb.append(":22:sachin");
sb.append("\n");
sb.append(":23:viru");
sb.append("\n");
sb.append("hazard");
sb.append("\n");
sb.append(":25:sevi");
String sb1=sb.substring(sb.toString().indexOf(':')+1);
String[] tok = sb1.toString().split("\n:");
System.out.println(tok.length);
for(String string:tok){
// if(string.contains(":")){
String[] data=string.split(":");
String tag=data[0];
String msgData=data[1];
System.out.println("tag::"+tag+"::data::"+msgData);
// }
}
}
}