开发者

Complex string split in Java

开发者 https://www.devze.com 2023-01-03 09:46 出处:网络
Consider the following String : 5|12345|value1|value2|value3|value4+5|777|value1|value2|value3|value4?5|777|value1|value2|value3|value4+

Consider the following String :

5|12345|value1|value2|value3|value4+5|777|value1|value2|value3|value4?5|777|value1|value2|value3|value4+

Here is how I want to split string, split it with + so I get this result :

myArray[0] = "5|12345|value1|value2|value3|value4";

myArray[1] = "5|777|value1|value2|value3|value4?5|777|value1|value2|开发者_如何学运维value3|value4";

if string has doesn't contain char "?" split it with "|" and continue to part II, if string does contain "?" split it and for each part split it with "|" and continue to part II.

Here is part II :

myObject.setAttribute1(newString[0]);
...
myObject.setAttribute4(newString[3]);

Here what I've got so far :

private static String input = "5|12345|value1|value2|value3|value4+5|777|value1|value2|value3|value4?5|777|value1|value2|value3|value4+";

public void mapObject(String input){

String[] myArray = null;

    if (input.contains("+")) {
        myArray = input.split("+");
    } else {
        myArray = new String[1];
        myArray[0] = input;
    }

    for (int i = 0; i < myArray.length; i++) {

        String[] secondaryArray = null;
        String[] myObjectAttribute = null;

        if (myArray[i].contains("?")) {
            secondaryArray = temporaryString.myArray[i].split("?");

            for (String string : secondaryArray) {
                myObjectAttribute = string.split("\\|");
            }
        } else {
            myObjectAttribute = myArray[i].toString().split("\\|");
        }

        myObject.setAttribute1(myObjectAttribute[0]);
        ...
        myObject.setAttribute4(myObjectAttribute[3]);
                    System.out.println(myObject.toString());
}

Problem :

When I split myArray, going trough for with myArray[0], everything set up nice as it should.

Then comes the myArray[1], its split into two parts then the second part overrides the value of the first(how do I know that?). I've overridden toString() method of myObject, when I finish I print the set values so I know that it overrides it, does anybody know how can I fix this?


I'm not quite sure what the intention is here, but in this snippet of code

secondaryArray = temporaryString.split("?");

for (String string : secondaryArray) {
    myObjectAttribute = string.split("\\|");
}

if secondaryArray has two elements after the split operation, you are iterating over each half and re-assigning myObjectAttribute to the output of string.split("\|") each time. It doesn't matter what is in the first element of secondaryArray, as after this code runs myObjectAttribute is going to contain the result of split("\\|") on the last element in the array.

Also, there is no point in calling .toString() on a String object as you do in temporaryString = myArray[i].toString().


The code doesn't seem to be able to handle the possible expansion of strings in the secondary case. To make the code clearer, I would use a List rather than array.

private static String input = "5|12345|value1|value2|value3|value4+5|777|value1|value2|value3|value4?5|777|value1|value2|value3|value4+";

private void split(List<String> input, List<String> output, String split) {
    for (String s: input) {
          if (s.contains(split))
          {
             output.addAll(Arrays.asList(s.split(Pattern.quote(split)));
          }
          else
              output.add(s);
    }
}

public void mapObject(String input) {

List<String> inputSrings = new ArrayList<String>();
List<String> splitPlus = new ArrayList<String>();

inputStrings.add(input);

split(inputStrings, splitPlus);

List<String> splitQuest = new ArrayList<String>();
split(splitPlus, splitQuest, "?");

for (String s: splitQuest) {   
   // you can now set the attributes from the values in the list
   // splitPipe

   String[] attributes = s.split("\\|");
   myObject.setAttribute1(attributes[0]);
   ....
   myObject.setAttribute4(attributes[3]);
   System.out.println(myObject);
}

}

0

精彩评论

暂无评论...
验证码 换一张
取 消