空白の直後にcharacter にアクセスして Capitalに変換したい。空白スペースを大文字にして削除することは知っていますが、スペースの後の文字にアクセスできません。
変換したい:"File to be uploaded"
に"FileToBeUploaded"
.
空白の直後にcharacter にアクセスして Capitalに変換したい。空白スペースを大文字にして削除することは知っていますが、スペースの後の文字にアクセスできません。
変換したい:"File to be uploaded"
に"FileToBeUploaded"
.
正規表現なし
最初に行うことは、分割すること" "
です..
String[] tokens = string.split(" ");
次のステップは、各トークンを循環し、最初の文字を取得することです。
for(int x = 0; x < tokens.length; x++)
{
String token = tokens[x];
String firstLetter = String.valueOf(tokens[x].charAt(0));
// After you have first letter, it's just a case of moving to upper case..
firstLetter = firstLetter.toUpperCase();
tokens[x] = firstLetter + tokens[x].substring(1, tokens[x].length());
}
注:読み取り専用でforeach
あるため、ループは使用しませんでした。foreach
最後に全体をくっつけます。これは同じループで実行できます。配列自体を変更したくない場合はforeach
、このコンテキストで a を使用すると見栄えが良くなります。次のように:
StringBuilder sb = new StringBuilder();
// Use a string builder for string creation.
for(String token : tokens)
{
String firstLetter = String.valueOf(token.charAt(0));
// After you have first letter, it's just a case of moving to upper case..
firstLetter = firstLetter.toUpperCase();
sb.append(firstLetter + token.substring(1, token.length()););
}
System.out.println(sb.toString());
// 正規表現を使えばとても簡単です
private String capitalEachWord(String s) {
Pattern p = Pattern.compile("\\s+\\w"); // Search for one or more space
Matcher m = p.matcher(s);
StringBuffer buffer = new StringBuffer();
while (m.find()) m.appendReplacement(buffer, m.group().toUpperCase());
m.appendTail(buffer); // add to last
return buffer.toString();
}
この形式の文字列はCamelCaseと呼ばれます。
文字列内の文字を変更することはできないため (不変であるため)、文字を繰り返し処理して新しい文字列を作成する必要があります。空白に遭遇した場合は、その文字をスキップしますが、次の文字を大文字にすることを忘れないでください.
public static String toCamelCase (String s) {
StringBuilder builder = new StringBuilder();
boolean capitalizeNextChar = false;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isWhitespace(c)) {
capitalizeNextChar = true;
} else {
if (capitalizeNextChar) {
c = Character.toUpperCase(c);
capitalizeNextChar = false;
}
builder.append(c);
}
}
return builder.toString();
}