我有一個String str = "a_bcde_fghij_k"
。如何在java中替換字符串?
,我想將其更改爲"aBcdeFghijK"
如果有_
字符,下一個字符將改變爲大寫並刪除_
字符。
我該怎麼做?
我有一個String str = "a_bcde_fghij_k"
。如何在java中替換字符串?
,我想將其更改爲"aBcdeFghijK"
如果有_
字符,下一個字符將改變爲大寫並刪除_
字符。
我該怎麼做?
我懷疑你需要只是逐字地瀏覽這個角色,在你走的時候建立起這個字符串。例如:
public static String underscoreToCapital(String text) {
// This will be a bit bigger than necessary, but that shouldn't matter.
StringBuilder builder = new StringBuilder(text.length());
boolean capitalizeNext = false;
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (c == '_') {
capitalizeNext = true;
} else {
builder.append(capitalizeNext ? Character.toUpperCase(c) : c);
capitalizeNext = false;
}
}
return builder.toString();
}
正則表達式本身不能做到這一點(沒有「touppercase」操作符,可以這麼說)。
但Guava有一個名爲CaseFormat
一個可愛的小工具,可以幫助你:
String result = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, str)
這工作,甚至「雖然你的輸入不是嚴格在UPPER_UNDERSCORE
格式,但CaseFormat
是寬鬆的這種方式(如果你想要第一個字符大寫,並使用UPPER_CAMEL
)。
另外,如果你絕對要使用正則表達式,你可以使用Matcher.appendReplacement
(它在JavaDoc一個很好的例子):
public static final Pattern UNDERSCORE_FOLLOWED_BY_ANYTHING = Pattern
.compile("_(.)");
public static String toUpperAfterUnderscore(String input) {
Matcher m = UNDERSCORE_FOLLOWED_BY_ANYTHING.matcher(input);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, m.group(1).toUpperCase());
}
m.appendTail(sb);
return sb.toString();
}
不錯的答案,有用的信息,但嗯外部庫... +1無論如何 – m0skit0
@ m0skit0:番石榴包含這麼多有用的小工具,它確實應該是每一個非平凡項目的依賴(以及一些不重要的項目)。 –
您也可以嘗試分裂。
String str = "a_bcde_fghij_k"
String result[] = str.split("_");
String newstr = result[0];
for (int i=1;i<result.length;i++) {
char first = Character.toUpperCase(result[i].charAt(0));
newstr = newstr + first + result[i].substring(1);
}
System.out.println(newstr);
split()需要正則表達式,如果你覺得這很重要。
這也使用'String'進行連接,它應該使用'StringBuilder'(或者至少''StringBuffer'),它們被*製作*來操縱。 –
有沒有立竿見影的方法與正則表達式來做到這一點,但我想用正則表達式可以大大簡化了任務:
public static String underscoreToCapital(final String input) {
String ret = input;
final Matcher m = Pattern.compile("_([a-z])").matcher(input);
while (m.find()) {
final String found = m.group();
final String toUppercase = m.group(1);
ret = ret.replaceAll(found, toUppercase.toUpperCase());
}
return ret;
}
你有可能做這種方法的執行一些檢查,但,這可能是另一個想法:從我
public String replaceAndUpper(String word) {
int charToRemove = word.indexOf("_");
while (charToRemove != -1) {
String part1 = word.substring(0, charToRemove);
String part2 = word.substring(charToRemove + 1);
char upperChar = Character.toUpperCase(part2.charAt(0));
word = part1 + String.valueOf(upperChar) + part2.substring(1);
charToRemove = word.indexOf("_");
}
return word;
}
稍微不同的方法,但做工不錯..
String str = "a_bcde_fghij_k";
int count=0;
String[] splitString = (str.split("_"));
for (String string : splitString)
{
count++;
if(count>1)
{
char c= string.charAt(0);
System.out.print(string.replace(c, Character.toUpperCase(c)));
}
else
System.out.print(string);
}
不是嗎?
可能重複的[如何替換字符串中的特殊字符?](http://stackoverflow.com/questions/4283351/how-to-replace-special-characters-in-a-string) –
@AdamArold:我不明白它是如何重複的。這部分涉及「大寫下一個字母」? –
當有兩個下劃線(如「__a」)時應該發生什麼? – f1sh