我正在尝试获取字符串中每个单词的第一个字母:
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
中每个单词的第一个字母
答案 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)
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();