在出现特定字符串时拆分字符串

时间:2018-01-18 17:09:18

标签: java

我有一个字符串  String str = abc = 1,name = thomas,bcd = 5

我想在name = thomas之后用','开始拆分这个字符串。我只想写一个通用代码,因为在名称之前我可以有任意数量的abc 例如,代替上面的字符串,我可能有类似这样的字符串

String str = abc = 1,abc = 2,abc = 3,name = thomas,bcd = 5,ghi = 6

等等。我的字符串可以在名称之前有任意数量的abc = something,如果有任意数量的abc,我想在一个部分中使用字符串upto name = thomas,在名称之后我只想在每个','

分割字符串

无论何时,托马斯的名字都无关紧要。我只是想在name =之后将它拆分

我想通过拆分来做到这一点。我不能涉及任何集合,因为它可能会影响其他代码模块。

在溢出字符串的第0部分,我希望从开头到字符串= thomas

我该怎么做?请帮忙

2 个答案:

答案 0 :(得分:-1)

你可以做到

List<String> tokens = Arrays.asList(str.split(","));
int nameIndex = IntStream.range(0, tokens.size())
    .filter(i -> "name".equals(tokens.get(i).split("=")[0].trim()))
    .findFirst().orElse(-1);
List<String> before = nameIndex == -1 ? tokens : tokens.subList(0, nameIndex + 1);
List<String> after = nameIndex == -1 ? new ArrayList<>() : tokens.subList(nameIndex + 1, tokens.size()) ;

对于那些喜欢2014年之前做事的人来说,这也可以写成

List<String> tokens = Arrays.asList(str.split(","));
int nameIndex = -1 ;
for (int i = 0 ; i < tokens.size() && nameIndex < 0 ; i++) {
    if ("name".equals(tokens.get(i).split("=")[0].trim()) {
        nameIndex = i ;
    }
}
List<String> before = nameIndex == -1 ? tokens : tokens.subList(0, nameIndex + 1);
List<String> after = nameIndex == -1 ? new ArrayList<>() : tokens.subList(nameIndex + 1, tokens.size()) ;

如果你想把它们放回字符串中,你可以做

String beforeString = String.join(",", before);
String afterString = String.join(",", after);

或者您可以根据需要处理列表中的每个元素。

这是一个测试用例,其中包含OP中提供的字符串:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;

public class Test {

    public static void main(String[] args) {
        String str= "abc=1,abc=2,abc=3, name=thomas,bcd=5, ghi=6";
        List<String> tokens = Arrays.asList(str.split(","));
        int nameIndex = IntStream.range(0, tokens.size())
            .filter(i -> "name".equals(tokens.get(i).split("=")[0].trim()))
            .findFirst().orElse(-1);
        List<String> before = nameIndex == -1 ? tokens : tokens.subList(0, nameIndex + 1);
        List<String> after = nameIndex == -1 ? new ArrayList<>() : tokens.subList(nameIndex + 1, tokens.size()) ;

        String beforeString = String.join(",", before);
        String afterString = String.join(",", after);

        System.out.println(beforeString);
        System.out.println(afterString);
    }

}

生成所需的输出

abc=1,abc=2,abc=3, name=thomas
bcd=5, ghi=6

答案 1 :(得分:-1)

String  str= "abc=1,abc=2,abc=3, name=thomas,bcd=5, ghi=6";
int indexOfName = str.indexOf("name=");
String sub = str.substring(indexOfName);//string starting with name=
int commaIndex = sub.indexOf(",");//index of first comma after name=thomas,
String [] arr = sub.substring(commaIndex).split(",");//split everything after name=thomas by comma into array
arr[0] = str.substring(0,indexOfName + commaIndex);//since we split on the exact index of the comma after name=thomas, there is an empty string in position 0
//we then set this empty position equal to the start of the whole string, and end the string right before the comma after name=thomas