【问题标题】:separate each uppercase word with space用空格分隔每个大写单词
【发布时间】:2020-05-11 14:31:51
【问题描述】:

我想将一个句子转换为一个字符串,其中所有单词都用空格分隔,并且只有第一个单词以大写字母开头。
例如,字符串“StopAndSmellTheRoses”。将被转换为“停下来闻闻玫瑰”。

当我编译它时,为什么它在每个大写单词之间都放了空格?

import java.io.*;
import java.util.Scanner;

public class assignment8 {

    public static String editing(String sentences) {
        for (int i = 0; i < sentences.length(); i++) {
            char c = sentences.charAt(i);
            if (Character.isUpperCase(c)) {
                sentences.concat(" ");
            }
        }
        return sentences;
    }

    public static void main(String[] args) throws FileNotFoundException {
        Scanner input = new Scanner(new File("sentence.txt"));
        String orignal;
        while (input.hasNextLine()) {
            orignal = input.nextLine();
            System.out.println(orignal);
            String edit = editing(orignal);
            System.out.println(edit);
        }
        input.close();
    }
}

【问题讨论】:

  • String 是不可变的。 String.concat 不修改字符串 - 它返回一个新字符串,并附加了另一个字符串。您可能会使用sentences = sentences.concat(" "),尽管在多次操作字符串时使用StringBuilder 会更有效。

标签: java string


【解决方案1】:

String.concat 为您提供一个新字符串,您必须将其保存到某个变量中。改用StringBuilder,效率更高。

public static String editing(String sentences) {
    StringBuilder sb = new StringBuilder();
    sb.append(sentences.charAt(0));
    for (int i = 1; i < sentences.length(); i++) {
        char c = sentences.charAt(i);
        if (Character.isUpperCase(c)) {
            sb.append(" ");
            c = Character.toLowerCase(c);
        }
        sb.append(c);
    }
    return sb.toString();
}

【讨论】:

    【解决方案2】:

    字符串是不可变的。如果你想这样做,你可以这样做:

    public static String editing(String sentences) {
        String str = sentences.charAt(0);
    
        for (int i = 1; i < sentences.length(); i++) {
            char c = sentences.charAt(i);
            if (Character.isUpperCase(c)) {
                str = str + " ";
                c = Character.toLowerCase(c);
            }
            str = str + c;
        }
        return str;
    }
    

    这是一种简单的方法 - 可以对其进行优化。我希望你明白了。

    【讨论】:

    • 是的,我明白了。谢谢!
    • 在多次操作同一个字符串时,将字符串相互附加并不是有效的方法。
    • @singh.indolia 你能说明一下 str = str+" ";意义
    • str = str + " ";意味着我们只是在原始字符串中附加空格字符并再次将其分配给 str。在这种情况下,对象将在常量池中创建,GC 将擦除所有遗漏的对象。这里的对象创建会更多,但 GC 会处理它。
    猜你喜欢
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多