在Java中,如何在每N次出现字符时分割字符串
我想在每四次出现逗号时拆分一个字符串在Java中,如何在每N次出现字符时分割字符串,java,arrays,string,split,Java,Arrays,String,Split,我想在每四次出现逗号时拆分一个字符串, 如何做到这一点?以下是一个例子: String str = "1,,,,,2,3,,1,,3,,"; Expected output: array[0]: 1,,,, array[1]: ,2,3,, array[2]: 1,,3,, 我试着像这样使用谷歌番石榴: Iterable<String> splitdata = Splitter.fixedLength(4).split(str); output: [1,,,, ,,2,, 3,,
,
如何做到这一点?以下是一个例子:
String str = "1,,,,,2,3,,1,,3,,";
Expected output:
array[0]: 1,,,,
array[1]: ,2,3,,
array[2]: 1,,3,,
我试着像这样使用谷歌番石榴:
Iterable<String> splitdata = Splitter.fixedLength(4).split(str);
output: [1,,,, ,,2,, 3,,1, ,,3,, ,]
Iterable splitdata=Splitter.fixedLength(4.split)(str);
输出:[1,,,,,,2,3,1,3,,]
我也试过:
String [] splitdata = str.split("(?<=\\G.{" + 4 + "})");
output: [1,,,, ,,2,, 3,,1, ,,3,, ,]
String[]splitdata=str.split((?取两个int变量。一个是计算','的数量。如果出现',则计数将移动。如果计数为4,则将其重置为0。另一个int值将指示从何处切断字符串。它将从0开始,在检测到第一个字符串后,即为终点(字符串中的字符位置)将是下一个的第一个点。请使用此起点和当前终点(i+1,因为发生后,i值将递增)。最后将字符串添加到数组列表中。这是一个示例代码。希望这对您有所帮助。抱歉,我的英语不好
String str = "1,,,,,2,3,,1,,3,,";
int k = 0;
int startPoint = 0;
ArrayList<String> arrayList = new ArrayList<>();
for (int i = 0; i < str.length(); i++)
{
if (str.charAt(i) == ',')
{
k++;
if (k == 4)
{
String ab = str.substring(startPoint, i+1);
System.out.println(ab);
arrayList.add(ab);
startPoint = i+1;
k = 0;
}
}
}
String str=“1,,,,,2,3,1,3,,”;
int k=0;
int起始点=0;
ArrayList ArrayList=新的ArrayList();
对于(int i=0;i
如果您想得到数组中的结果,也可以尝试此方法
String str = "1,,,,,2,3,,1,,3,,";
System.out.println(str);
char c[] = str.toCharArray();
int ptnCnt = 0;
for (char d : c) {
if(d==',')
ptnCnt++;
}
String result[] = new String[ptnCnt/4];
int i=-1;
int beginIndex = 0;
int cnt=0,loopcount=0;
for (char ele : c) {
loopcount++;
if(ele==',')
cnt++;
if(cnt==4){
cnt=0;
result[++i]=str.substring(beginIndex,loopcount);
beginIndex=loopcount;
}
}
for (String string : result) {
System.out.println(string);
}
这里有一个更灵活的函数,使用了以下想法:
静态列表splitAtNthOccurrence(字符串输入,int n,字符串分隔符){
列表项=新的ArrayList();
//*?是不情愿的量词
String regex=Strings.repeat(“.*”+分隔符,n);
Matcher Matcher=Pattern.compile(regex).Matcher(input);
int lastEndOfMatch=-1;
while(matcher.find()){
添加(matcher.group());
lastEndOfMatch=matcher.end();
}
如果(lastEndOfMatch!=-1){
添加(input.substring(lastEndOfMatch));
}
返回件;
}
以下是您使用示例对其进行的命名:
String input = "1,,,,,2,3,,1,,3,,";
List<String> pieces = splitAtNthOccurrence(input, 4, ",");
pieces.forEach(System.out::println);
// Output:
// 1,,,,
// ,2,3,,
// 1,,3,,
String input=“1,,,,,2,3,1,3,,”;
列表项=splitAtNthOccurrence(输入,4,“,”);
fixes.forEach(System.out::println);
//输出:
// 1,,,,
// ,2,3,,
// 1,,3,,
我使用字符串。从中重复。这项工作非常成功,并在Java8中进行了测试
public String[] split(String input,int at){
String[] out = new String[2];
String p = String.format("((?:[^/]*/){%s}[^/]*)/(.*)",at);
Pattern pat = Pattern.compile(p);
Matcher matcher = pat.matcher(input);
if (matcher.matches()) {
out[0] = matcher.group(1);// left
out[1] = matcher.group(2);// right
}
return out;
}
//Ex: D:/folder1/folder2/folder3/file1.txt
//if at = 2, group(1) = D:/folder1/folder2 and group(2) = folder3/file1.txt
问题是什么。我们了解您的要求,并且我们假设您试图解决此问题。请通过发布代码描述您的尝试,并解释问题所在。使用循环并计算逗号,如果计数=4,则使用条件重置计数,并将以下字符串添加到阵列检查这不是重复的““每第n个位置拆分一次”,因为您需要计算一个特定字符(即逗号)。逗号之间的标记长度是否有限制?
public String[] split(String input,int at){
String[] out = new String[2];
String p = String.format("((?:[^/]*/){%s}[^/]*)/(.*)",at);
Pattern pat = Pattern.compile(p);
Matcher matcher = pat.matcher(input);
if (matcher.matches()) {
out[0] = matcher.group(1);// left
out[1] = matcher.group(2);// right
}
return out;
}
//Ex: D:/folder1/folder2/folder3/file1.txt
//if at = 2, group(1) = D:/folder1/folder2 and group(2) = folder3/file1.txt