我输入如下
Date Place total trains
monday,chennai,10
tuesday,kolkata,20
wednesday,banglore,karnataka,30
我想拆分这些数据。到目前为止,我已经使用了
String[] data = input.split(",");
如果我喜欢上面的话,那我就得到了
index[0] index[1] index[2]
monday chennai 10
tuesday kolkata 20
wednesday banglore karnataka 30
但我想要输出如下
index[0] index[1] index[3]
wednesday banglore,karnataka 30
有没有办法实现这个
答案 0 :(得分:0)
根据第一个逗号或最后一个逗号分割您的输入。
String s = "wednesday,banglore,karnataka,30";
String parts[] = s.split("(?<=^[^,]*),|,(?=[^,]*$)");
System.out.println(Arrays.toString(parts));
输出:
[wednesday, banglore,karnataka, 30]
答案 1 :(得分:0)
如果使用正则表达式拆分字符串,则基本上可以告诉应该剪切字符串的位置。这必然会削减你与正则表达式相匹配的东西。这意味着如果您在\w
处拆分,则每个字符都是一个拆分点,并返回它们之间的子串(全部为空)。 Java会自动删除尾随的空字符串,如文档中所述。
这也解释了为什么延迟匹配\w*?
将为您提供每个字符,因为它将匹配任何字符(零宽度)之间(和之前和之后)的每个位置。剩下的是字符串本身的字符
尝试
String[] data = input.split("(?<=^\\w+),|,(?=\\d+)");
一些好的解释是here
答案 2 :(得分:0)
坚持基础知识,您的数据必须采用这种格式。
Date,Place,total trains
"monday","chennai","10"
"tuesday","kolkata","20"
"wednesday",'banglore,karnataka","30"
因为,如果分隔符和数据都相同,那么要编写一个复杂的代码来处理,只需将数据放在双引号中即可。 csv文件也使用此功能。
答案 3 :(得分:0)
假设你知道“,”的位置,你可以摆脱它。
下面的程序用“”替换第二个实例,因此string.split()可以根据需要使用
需要导入import java.util.regex。*;
===========
public static void main(String args[]){
StringBuffer sb = new StringBuffer();
String s = "wednesday,banglore,karnataka,30";
Pattern p = Pattern.compile(",");
Matcher m = p.matcher(s);
int count = 1;
while(m.find()) {
if(count == 2 ){
m.appendReplacement(sb, " ");
}
count++;
}
m.appendTail(sb);
System.out.println(sb);
s= sb.toString();
String[] data = s.split(",");
System.out.println( data[0] + "-" + data[1] + "-" +data[2] );
}//psvm
答案 4 :(得分:-1)
此代码适用于您:
public static void main(String[] args) {
String s1 = "wednesday,banglore,karnataka,30";
String s2 = "monday,chennai,10";
String[] arr1 = s1.split("(?<=^\\w+),|,(?=\\d+)");
for(String ss : arr1)
System.out.println(ss);
System.out.println();
String[] arr2 = s2.split("(?<=^\\w+),|,(?=\\d+)");
for(String ss : arr2)
System.out.println(ss);
}
O / P:
wednesday
banglore,karnataka
30
monday
chennai
10