2017-03-03 86 views
1

我试图创建代码以消除用户输入字符串中的空格删除空格,但是我收到一个错误在第16行从用户输入字符串

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15 at practice5.main(practice5.java:16)

注:我们不允许使用Java的替换方法。我需要手动编码。

这里是我的代码:

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); 
    } 
} 

谢谢!

+4

你必须停止你的循环,如果你到达字符串的结尾 – Jens

回答

1

您可以使用String类的函数。只需使用line.replace(“”,“”)

+0

嗨,我的教授要求我们手动编码。但是,谢谢你,我会搜索它。 – Katrina

+0

然后你需要停止循环,例如 if(i> phrase。长度)休息; – Markus

0

为什么要重新发明轮子?只要使用字符串的方法replace

String output = line.replace(" ", ""); 
+0

嗨,谢谢你,但我的教授要求我们手工编码:) – Katrina

+0

@Katrina你应该为你的问题添加这条信息,以便其他人可以发表他们的答案。 – QBrute

+0

你说得对,我现在编辑它。我没有意识到已经存在一种方法。 :) – Katrina

1

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15 at practice5.main(practice5.java:16)

当数组元素的调用是不存在的指数是由该则抛出ArrayIndexOutOfBoundsException。

在你的代码中,在第16行,你打电话phrase[n+1],除了n==(phrase.length-1)因为那么n + 1将等于phrase.length,所有情况下都可以正常工作。

长度从1开始计数,而索引从0开始计数。因此,在最后一次迭代期间,phrase[n+1]等于phrase[phrase.length],这是一个超出限制的索引。

您可以通过减少循环迭代1。

+1

嗨,请问是否每次人物移动时,这里:phrase [n] = phrase [n + 1]; phrase.length也变小了吗?另外,感谢您的回复。我明白你在说什么,但我仍然不确定如何编码:/我试过(n = i-1; n Katrina

+0

@Katrina你的循环需要'for(n = i; n

+0

嗨@ adeen-s,我也试过这个,我仍然得到相同的错误:( – Katrina

1

原因错误更正:ArrayIndexOutOfBound

假设侑一句话是:ABC。现在当你将执行代码...这是发生...

第一迭代:是在索引0(即,在一个).2nd迭代,是指数1(即,在b)一种ND上第三迭代中,是索引3(上c)中,并再次递增1,所以现在i = 4的。现在

while(phrase[i]!='\0') 

将返回这样的例外,因为你是比较索引4处的值而不可用。因此,发生这种异常。

0

使用CharMatcher确定

whether a character is whitespace according to the latest Unicode standard

CharMatcher.whitespace().trimAndCollapseFrom("user input",""); 
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); 
} 
+0

工作良好,如果要求不是一直保存在char数组中的话,也可以删除继续,如果你移动+号里面的if和否定条件 – XtremeBaumer

+0

@XtremeBaumer谢谢你的建议,更新回答!!! – Naman