从用户输入String中删除空格

时间:2017-03-03 13:06:55

标签: java

我试图创建一个代码来删除用户输入字符串中的空格,但是我在第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);
    }
}

谢谢!

6 个答案:

答案 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","");