gpt4 book ai didi

Java:使用 split 方法添加时,字符串数组列表中出现额外的空格

转载 作者:行者123 更新时间:2023-12-01 18:31:25 25 4
gpt4 key购买 nike

我正在尝试创建一个 split 方法,将从输入文件中读取的行拆分为我返回的字符串数组。问题是当我发送诸如

之类的行时

(;world 2013/05 // end

我想要打印出来

String in position 0: (
String in position 1: ;
String in position 2: world
String in position 3: 2013
String in position 4: /
String in position 5: 05
String in position 6: /
String in position 7: /
String in position 8: end

忽略空格。然而,目前它正在打印

String in position 0: 
String in position 1: (
String in position 2:
String in position 3: ;
String in position 4: world
String in position 5: 2013
String in position 6: /
String in position 7: 05
String in position 8:
String in position 9: /
String in position 10:
String in position 11: /
String in position 12:
String in position 13: end

我不明白为什么我的数组列表中添加了额外的空格。如果我使用 isOperator 方法中的任何其他运算符,则会发生相同的错误,例如:+, -, *

这是 split 方法的代码。

private static String[] split(String line) {
String temp = ""; //var to store each line from input temporarily
boolean flag = false; //var to check if "\" is in the from input
char[] lineCharArray = line.toCharArray(); //transforms line into array of chars
List<String> array = new ArrayList<String>(); //ArrayList to store the split strings temporarily

for (int i = 0; i<line.length(); i++){
if (!isDelimiter(lineCharArray[i]) && !isOperator(lineCharArray[i])){
temp += lineCharArray[i];
} else {
array.add(temp);
temp = "";
if (isDelimiter(lineCharArray[i])) {
if (lineCharArray[i] == ' ') {
continue;
}
array.add( String.valueOf(lineCharArray[i]));
}
if (isOperator(lineCharArray[i])) {
array.add( String.valueOf(lineCharArray[i]));
}
}
}
array.add(temp);

String [] strings = new String[array.size()]; //Dynamic allocation of array strings
array.toArray( strings );
for (int i = 0; i<strings.length; i++) {
System.out.println("String in position " + i + ": " + strings[i]);
}
return strings;
}

private static boolean isDelimiter(char c) {
char [] delimiters = {':', ';', ' ', '}','{', '[',']','(',')',','};
for (int x=0; x<delimiters.length; x++) {
if (c == delimiters[x]) return true;
}
return false;
}

private static boolean isOperator(char o) {
char [] operators = {'+', '-', '*','/', '%','<','>','=','!','&','|'};
for (int x=0; x<operators.length; x++) {
if (o == operators[x]) return true;
}
return false;
}

最佳答案

基本问题是 temp 可以为空(一开始就是空的)

所以虽然...

if (!isDelimiter(lineCharArray[i]) && !isOperator(lineCharArray[i])) {

等于 false,您不断向 List 添加空的 temp 值。

要修复此问题,您可以在添加之前检查 temp 是否为空...

} else {
if (!temp.isEmpty()) {
array.add(temp);
temp = "";
}

您还缺少' ' deilimitere

char[] delimiters = {':', ';', '}', '{', '[', ']', '(', ')', ',', ' '};
Missing me ---------------^

我认为 your previous post 中提到了这一点

所以,经过这几次更改,我得到了这个输出

String in position 0: (
String in position 1: ;
String in position 2: world
String in position 3: 2013
String in position 4: /
String in position 5: 05
String in position 6: /
String in position 7: /
String in position 8: end

这是使用调试器的基本过程,因此您可以实时查看代码的执行情况并查看变量的实际情况。

关于Java:使用 split 方法添加时,字符串数组列表中出现额外的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23989369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com