在这段代码中找不到错误

时间:2014-12-11 21:36:00

标签: java string

我试过调试这段代码,但是找不到有什么问题。

我正在尝试使用此代码消除空格并将单词“I”的任何实例大写。 然后我试图把句子放回去,而单词之间只有一个空格。截至目前,如果原始字符串中有4个空格,则修订后的字符串中仍会有4个空格。

由于

public class Sentencefix {

    public static void main(String[] args) {

        System.out.println("Enter your input sentece");
        String input = IO.readString();

        String[] arr = input.split(" ");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i].trim();
            arr[i] = arr[i].toLowerCase();
            if (arr[i] == "i") {
                arr[i] = arr[i].toUpperCase();
            }

        }
        input = "";
        for (int j = 0; j < arr.length; j++) {
            input = input + ' ' + arr[j];
        }
        input = input.trim();
        char ch = input.charAt(0);
        ch = Character.toUpperCase(ch);
        input = ch + input.substring(1, input.length());
        if (input.charAt(input.length() - 1) != '.' && input.charAt(input.length() - 1) != '!' && input.charAt(input.length() - 1) != '?') {
            input = input + '.';
        }

        System.out.println(input);
    }
}

编辑发布了整个代码

3 个答案:

答案 0 :(得分:0)

我看到两个问题。

第一种是比较字符串的方式。了解如果您的&#34; i&#34; string不是大写的,它表示if是错误的。这将对您有所帮助:Java String.equals versus ==

第二件事是分裂是如何运作的。如果单词之间有三个空格,则第一个空格和最后一个空格将位于分割的数组中。 "aaa aaa".split()的结果将是这样的数组:

[0]="aaa"
[1]=" "
[2]=" "
[3]="aaa"

当你" ".trim()时,你得到并清空字符串""。最后,当你循环重建整个事物时,你将空字符串附加到你的字符串。

答案 1 :(得分:0)

使用equals而不是==来比较字符串 所以行

if(arr[i] == "i") 

变为

if("i".equals(arr[i]))

有关详细信息,请查看此处: http://www.thejavageek.com/2013/07/27/string-comparison-with-equals-and-assignment-operator/

答案 2 :(得分:0)

如果我们只是想简单的话,我只需要说明它是如何变得简单。

String output = "";
for (int i=0;i<input.length();i++)
    if (input.charAt(i)=='i')
        input += "I";
    else if (i==input.length()-1 || (input.charAt(i)==' ' && input.charAt(i+1)!=' '))
        output += input.charAt(i);
input = output;
System.out.println(input);