获取字符串的第一个字母(多个单词)

时间:2014-07-30 12:00:13

标签: java string char tostring

我正在尝试获取字符串中每个单词的第一个字母:

String recInf = recursos.getString(nombre);

char[] tipoAbreviado = recInf.toCharArray();
tipoAbreviado[0] = Character.toUpperCase(tipoAbreviado[0]);

for (int i = 0; i < recInf.length() - 2; i++) {
    // Es 'palabra'
    if (tipoAbreviado[i] == ' ' || tipoAbreviado[i] == '.' || tipoAbreviado[i] == ',') {
        // Reemplazamos
        tipoAbreviado[i + 1] = Character.toUpperCase(tipoAbreviado[i + 1]); 
    }

    nombre = tipoAbreviado.toString();
}

最后nombre的值是[C @ 3b1938ea,而不是recInf中每个单词的第一个字母

6 个答案:

答案 0 :(得分:2)

您可以使用Arrays.toSting(your_array)打印Array

查看toString()中的Arrays做什么

 public static String toString(long[] a) {
    if (a == null)
        return "null";
    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(a[i]);
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
} 

但是当您使用tipoAbreviado.toString();时,它会在toString()课程中调用Object方法。

toString()课程中的Object方法有哪些?

 public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

这就是为什么你要获得当前的优势。

答案 1 :(得分:1)

您应使用new String(char[])

toString创建Array,而不是prints the memory address representation String char[]上使用nombre = new String(tipoAbreviado);
{{1}}

答案 2 :(得分:1)

您可以使用正确的正则表达式使用字符串.split(),然后选择第一个字符:

 String[] words = "Your String & !+ and some extraodrinary others".split("[^a-zA-Z]+");
 for (String word: words ){
    System.out.println(word.charAt(0));
 }

答案 3 :(得分:0)

假设您要处理的String对象是recInf,我建议按以下方式执行:

String recInf = new String(text.replaceAll("[^\\p{L}\\p{Nd} ]+"," ")
    .replaceAll("[\\s]+", " "));
String[] words = recInf.split(" ");
String[] firstLetters = new String[words.length];

for(int i=0; i<words.length;i++){
   firstLetters[i]=words[i].getCharAt(0);
}

答案 4 :(得分:0)

您可以尝试使用正则表达式获取它们。

当我在字符串(\w)\w+上使用RegEx Hallo Welt, ich bin ein String时,我得到一个H, W, i, b, e, S的数组。注意:您必须将表达式作为全局表达式运行(不止一次)。

答案 5 :(得分:0)

你可以试试这个

nombre = (new StringBuilder(tipoAbreviado)).toString();