考虑以下字符串:
5|12345|value1|value2|value3|value4+5|777|value1|value2|value3|value4?5|777|value1|value2|value3|value4+
以下是我想要分割字符串的方法,将其拆分为+所以我得到了这个结果:
myArray[0] = "5|12345|value1|value2|value3|value4";
myArray[1] = "5|777|value1|value2|value3|value4?5|777|value1|value2|value3|value4";
如果string has不包含char "?"
则将其与"|"
分开并继续到第II部分,如果string包含"?"
则将其拆分并且用于每个部分将其与"|"
分开并继续第二部分。
这是第二部分:
myObject.setAttribute1(newString[0]);
...
myObject.setAttribute4(newString[3]);
这是我到目前为止所得到的:
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());
}
问题:
当我拆分myArray时,使用myArray [0]进行深入研究,一切都设置得很好。
然后是myArray [1],它分为两部分,然后第二部分覆盖了第一部分的值(我怎么知道?)。我已经覆盖了myObject的toString()
方法,当我完成时我打印设定值,所以我知道它会覆盖它,有人知道我该如何解决这个问题?
答案 0 :(得分:3)
我不太确定这里有什么意图,但在这段代码中
secondaryArray = temporaryString.split("?");
for (String string : secondaryArray) {
myObjectAttribute = string.split("\\|");
}
如果secondaryArray
在拆分操作后有两个元素,则每次都会迭代每一半并将myObjectAttribute
重新分配给string.split(“\ |”)的输出。 secondaryArray
的第一个元素中的内容并不重要,因为在此代码运行之后myObjectAttribute
将在数组的最后一个元素中包含split("\\|")
的结果。
此外,与.toString()
中一样,在String对象上调用temporaryString = myArray[i].toString()
没有意义。
答案 1 :(得分:2)
代码似乎无法处理二级情况下字符串的可能扩展。为了使代码更清晰,我将使用List而不是数组。
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);
}
}