【问题标题】:How do I append characters in Java?如何在 Java 中附加字符?
【发布时间】:2018-05-25 22:32:17
【问题描述】:

在这个程序中,我不仅要打印结果,还要将结果保存为字符串。我怎么做? 另外,我如何“返回”可以打印的字符串值? (此程序将删除“ad”字符串中除单词首字母外的所有元音)

public class RemoveVowels {

    public static void main(String[] args) {
        String a = "";
        remove("Remove all vowels from string except the first letters");
        System.out.println();

    }

    static String remove(String a) {

        char c = '\0';
        String ss = "";
        String s = ("" + a.charAt(0));
        String sent = ("" + s);
        boolean vowel = false;
        boolean first = false;

        System.out.print(s);

        for (int i = 1; i <= (a.length() - 1); i++) {

            c = a.charAt(i);

            if (a.charAt(i - 1) == ' ')
                first = true;
            else
                first = false;

            if (((c == 'a' || c == 'e') || (c == 'i' || c == 'o')) || (c == 'u' || c == 'y'))
                vowel = true;
            else
                vowel = false;

            if ((first == true) || (vowel == false)) {
                s = ("" + c);
                System.out.print(s);

            }

        }
        return s;
    }

}

【问题讨论】:

  • 您要打印哪个结果?
  • 我已经用 System.out.print(s) 打印出来了——但我希望能够保存打印出来的字符串(因为它一次打印一个字符循环)我也想知道如何返回整个打印字符串的值,以便我可以在 main 方法中打印它。
  • 更改 s = ("" + c);到 s+=("" + c);但我建议你使用 StringBuilder

标签: java string char append


【解决方案1】:

您可能想看看StringBuilder。 将您在 System.out.print(s); 中打印的字符串(即字符串 s)附加到 StringBuilder 对象。

返回从 StringBuilder 对象生成的字符串。 下面的代码说明了这一点。

    String modify(String ad) {
        StringBuilder resultBuilder = new StringBuilder();
        // part before loop goes here.        
        for(int i = 1; i <= (ad.length() - 1); i++) {
            // inside loop computation
            System.out.print(s);  // optional
            resultBuilder.append(s);
        }
        return resultBuilder.toString();
    }

您可以按照自己的方式使用返回的字符串。

注意:一种简单的方法是将结果附加到字符串s,但这不是最好的方法,因为字符串是immutable,并且每次都会生成一个新字符串。我建议使用 StringBuilder。

【讨论】:

    【解决方案2】:

    第一件事:你添加了许多不需要的东西:括号、连接时的空字符串、显式== false== true等。 它使不必要的冗长。

    那么关于你的问题:

     s = ("" + c);
    

    可以替换为:

     s+ = c;
    

    它不再覆盖s,而是将c 值连接到存储在s 中的先前值。

    您也可以使用StringBuilder

        StringBuilder content = new StringBuilder();
    
        for (int i = 1; i <= (ad.length() - 1); i++) {
             ...
            c = ad.charAt(i);
    
            if (first  || !vowel) {
                content.append(c);
                System.out.print(content.toString());
            }
             ...
        }
    

    请注意,这些解决方案没有一个更好。
    从理论上讲,StringBuilder 在运行时通过一些串联更有效,但源代码中的String 串联可以在编译时和运行时进行优化.
    因此,只需使用使您的代码更具可读性的方式。

    【讨论】:

      【解决方案3】:

      s = ("" + c); 更改为s+=("" + c); 但我建议你使用StringBuilder

      【讨论】:

        【解决方案4】:

        最简单的追加方法是使用+,如s = s + c。这不是提高性能的最佳方法,因为每次都会创建一个新字符串(由于字符串是不可变的)。相反,您可以使用StringBuilder,例如

        //Create outside of loop
        StringBuilder sb = new StringBuilder();
        //Append in loop
        sb.append(c);
        //Print when done
        System.out.println(sb);
        //Return the String to the caller
        return sb.toString();
        

        【讨论】:

        • 我喜欢 s=s+c 选项。如何在我的代码中使用它,然后打印出保存字符串的结果?
        • 正如我所说,StringBuilder 方式更好,但如果你真的想使用 s = s + c 你可以简单地改变 s = ("" + c);变成 s = s + c;。结果存储在 s 中,您可以像现在一样打印并返回它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-23
        • 2022-01-26
        • 2013-09-28
        • 1970-01-01
        • 2012-10-05
        • 2013-04-05
        • 1970-01-01
        相关资源
        最近更新 更多