亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用Java RegEx全局替換分組的匹配項

使用Java RegEx全局替換分組的匹配項

aluckdog 2021-05-21 15:02:00
我已經跟隨PERL一線。該Perl RegEx只是將給定句子的所有單詞的首字母大寫。$val =~ s/\b(.)(.*?)\b/uc($1).$2/eg;輸入:"united states corp"輸出"United States Corp"但是,我需要在JAVA中實現相同的功能。我正在關注。String INPUT="united states corp"Pattern p = Pattern.compile("\\b(.)(.*?)\\b");Matcher m = p.matcher(INPUT);if (m.find()) {    INPUT = m.replaceAll(m.group(1).toUpperCase() + m.group(2));}輸入:"United States Corp".輸出:"UnitedUnitedUnitedUnitedUnited"謝謝。
查看完整描述

1 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

要匹配第一個小寫字母的單詞(為了不匹配已經大寫的單詞),可以使用\b\p{Ll}regex并使用Matcher#appendReplacement()method來操作匹配:


String INPUT="united states corp";

Pattern p = Pattern.compile("\\b\\p{Ll}");

StringBuffer result = new StringBuffer();

Matcher m = p.matcher(INPUT);

while (m.find()) {

    m.appendReplacement(result, m.group().toUpperCase());

}

m.appendTail(result);

System.out.println(result.toString()); // => United States Corp

參見Java演示。


根據Java Matcher類文檔:


的appendReplacement和appendTail方法可以串聯使用,以便收集的結果到一個現有的字符串緩沖區


因此,如果您使用當前的正則表達式,"\\b(.)(.*?)\\b"則需要將while (m.find())主體替換為


m.appendReplacement(result, m.group(1).toUpperCase() + m.group(2));


查看完整回答
反對 回復 2021-05-26
  • 1 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號