3 回答
TA贡献1848条经验 获得超10个赞
您的问题说您不想使用正则表达式,但我认为没有理由要求该要求,除了这可能是家庭作业。如果您愿意在此处使用正则表达式,那么有一个单行解决方案可将您的输入字符串拆分为以下模式:
(?<=\S)(?=\s)|(?<=\s)(?=\S)
这种模式使用环视来分割,无论前面是非空白字符,后面是空白字符,反之亦然。
String input = "EE B";
String[] parts = input.split("(?<=\\S)(?=\\s)|(?<=\\s)(?=\\S)");
System.out.println(Arrays.toString(parts));
[EE, , B]
^^ a single space character in the middle
TA贡献1872条经验 获得超3个赞
如果我理解正确,您希望将字符串中的字符分开,以便类似连续的字符保持在一起。如果是这种情况,我会这样做:
public static ArrayList<String> splitString(String str)
{
ArrayList<String> output = new ArrayList<>();
String combo = "";
//iterates through all the characters in the input
for(char c: str.toCharArray()) {
//check if the current char is equal to the last added char
if(combo.length() > 0 && c != combo.charAt(combo.length() - 1)) {
output.add(combo);
combo = "";
}
combo += c;
}
output.add(combo); //adds the last character
return output;
}
请注意,我没有使用数组(具有固定大小)来存储输出,而是使用了ArrayList具有可变大小的 。此外,与其检查下一个字符是否与当前字符相等,我更喜欢使用最后一个字符。该变量combo用于在字符转到 之前临时存储它们output。
现在,这是按照您的指南打印结果的一种方法:
public static void main(String[] args)
{
String input = "EEEE BCD DdA";
ArrayList<String> output = splitString(input);
System.out.print("[");
for(int i = 0; i < output.size(); i++) {
System.out.print("\"" + output.get(i) + "\"");
if(i != output.size()-1)
System.out.print(", ");
}
System.out.println("]");
}
运行上述代码时的输出将是:
["EEEE", " ", "B", "C", "D", " ", "D", "d", "A"]
添加回答
举报