我试图创建一个代码来删除用户输入字符串中的空格,但是我在第16行收到错误。
线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException: 15在practice5.main(practice5.java:16)
注意:我们不允许使用Java的replace方法。我需要手动编码。
这是我的代码:
import java.util.Scanner;
public class practice5{
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
String line;
System.out.print("Sentence: ");
line = scanner.nextLine();
char phrase[] = line.toCharArray();
int i = 0;
int n = 0;
while(phrase[i] != '\0') {
if(phrase[i] == ' ') {
for(n=i; n<phrase.length; n++) {
phrase[n] = phrase[n+1];
}
}
i++;
}
String output = new String(phrase);
System.out.print(output);
}
}
谢谢!
答案 0 :(得分:2)
尝试使用以下代码可能有所帮助
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
String line;
System.out.print("Sentence: ");
line = scanner.nextLine();
char phrase[] = line.toCharArray();
String result = "";
for (int i = 0; i < phrase.length; i++) {
if (phrase[i] != ' ') {
result += phrase[i];
}
}
System.out.println(result);
}
答案 1 :(得分:1)
您可以使用String类的函数。只需使用line.replace(“”,“”)
答案 2 :(得分:1)
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException: 15在practice5.main(practice5.java:16)
当在不存在的索引处调用数组元素时,抛出ArrayIndexOutOfBoundsException。
在您的代码中,在第16行,您调用的btcp::socket sock(ios);
sock.connect(carbon_endpoint /* , error_code */);
适用于除phrase[n+1]
之外的所有情况,因为那时n + 1将等于n==(phrase.length-1)
。
从1开始计算长度,而从0开始计算索引。因此,在上一次迭代期间,phrase.length
等同于phrase[n+1]
,这是一个超出范围的索引。
您可以通过将循环迭代减少1来纠正它。
答案 3 :(得分:1)
错误原因:ArrayIndexOutOfBound
假设您的句子是: abc 。现在您将执行您的代码......这种情况正在发生......
第一次迭代: i 位于索引0(即a).2nd迭代, i 位于索引1(即b)和第3次迭代时, 我在索引3(在c上),再次 i 增加1,所以现在 i = 4 。现在
while(phrase[i]!='\0')
将返回此类异常,因为您正在比较索引4处的值而不可用。因此,发生此类异常。
答案 4 :(得分:0)
为什么重新发明轮子?只需使用String的replace
方法:
String output = line.replace(" ", "");
答案 5 :(得分:0)
使用CharMatcher
确定
根据最新的Unicode,字符是否为空格 标准
CharMatcher.whitespace().trimAndCollapseFrom("user input","");