Java。大写、加句号

Java. Capitalizing, adding period

正在处理这个菜鸟任务,需要帮助。

此代码必须: 将第一个单词的第一个字母大写。 在句子末尾添加句点 (.)。 将单词连接成一个完整的字符串,并带有空格。 不要对文字进行其他操作。

以下是此代码应执行的操作的示例: 输入 "i", "am", "super", "HERO ” 输出我是超级英雄。

当时我是这么想的:

import java.util.StringJoiner;
import java.lang.String;

public class My {
    public static void main(String[] args) {

        String[] arr = new String[]{"i", "am", "super", "HERO"};
        StringJoiner sj = new StringJoiner(" ");
        //StringBuffer sb = new StringBuffer(".");
        for (String s : arr) {
            sj.add(s);
        }
        sj.append(".");
        sj.capitalize();
        System.out.println(sj);

}

但在“append”和“capitalize”处捕获错误 - 无法解析方法。请帮忙。

一个带有 StringBuilder 的小示例,您可以在此处查看 https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html,它具有追加方法。

单词大写可以查看How to capitalize the first character of each word in a string

例子

    String[] arr = new String[]{"i", "am", "super", "HERO"};
    StringBuilder sb = new StringBuilder();

    for (String word : arr){
        sb.append(WordUtils.capitalize(word));
    }

    sb.toString();

说明

A StringJoiner 不提供方法 appendcapitalize,因此您会收到错误消息。检查 documentation.

应该在sj.toString()的结果上加上.,即String result = sj.toString() + ".";。第一个单词 s 必须大写,而不是 StringJoiner.


解决方案

这是一个将所有内容放在一起的工作片段:

String[] arr = new String[]{"i", "am", "super", "HERO"};

StringJoiner sj = new StringJoiner(" ");
// Capitalize first word
sj.add(Character.toUpperCase(arr[0].charAt(0)) + arr[0].substring(1));
// Add the remaining words
for (int i = 1; i < arr.length; i++) {
    sj.add(arr[i]);
}
String result = sj.toString() + ".";

System.out.println(result);

请注意,您可能需要检查 arr 中根本没有单词的边缘情况,即它是空的。当前代码将失败。


帮自己一个忙,将大写代码打包到一个小的实用方法中:

private static String capitalize(String word) {
    return Character.toUpperCase(word.charAt(0)) + word.substring(1);
}

那么代码就是:

String[] arr = new String[]{"i", "am", "super", "HERO"};

StringJoiner sj = new StringJoiner(" ");
// Capitalize first word
sj.add(capitalize(arr[0]));
// Add the remaining words
for (int i = 1; i < arr.length; i++) {
    sj.add(arr[i]);
}
String result = sj.toString() + ".";

System.out.println(result);

流解决方案

如果你喜欢 Stream-API:

String result = capitalize(arr[0])
    + Arrays.stream(arr).skip(1)
        .collect(Collectors.joining(" "))
    + ".";

StringJoiner 后缀

您还可以使用 StringJoiner 后缀添加 "."

StringJoiner sj = new StringJoiner(" ", "", ".");

然后它会自动将 "." 添加到末尾,当您执行 toString.

与 Stream 解决方案类似:

Collectors.joining(" ", "", ".")

没有办法使用 StringJoiner 来完成。

public class My {
public static void main(String[] args) {

    String[] arr = new String[]{"i", "am", "super", "HERO"};
    arr[0].toUpperCase();

    StringJoiner sj = new StringJoiner(" ");

    for (String s : arr) {

        sj.add(s);
    }
    sj.append(".");

    System.out.println(sj);
}