如何將字符串中的字母(例如「Hello」)替換爲字母?用另一個字符串替換一個字符串的內容?
String bubbled = "ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ";
我最初只是做了的replaceAll(「A」,「ⓐ」),但我覺得必須有這樣做的更有效的方法。
如何將字符串中的字母(例如「Hello」)替換爲字母?用另一個字符串替換一個字符串的內容?
String bubbled = "ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ";
我最初只是做了的replaceAll(「A」,「ⓐ」),但我覺得必須有這樣做的更有效的方法。
您可以使用字符a
和ⓐ
以確定字母的偏移值。結合StringBuilder
它應該是相當有效的。當然,對輸入字符串只能是字母字符,您可能必須非常嚴格。
這是什麼上述我的代碼:
public class Bubbled {
public static void main(String[] args) {
char bubbledA = 'ⓐ';
int lowerCaseOffset = bubbledA - 'a';
int upperCaseOffset = bubbledA - 'A';
String input = "Hello";
StringBuilder bubbledOutput = new StringBuilder();
for (Character c : input.toCharArray()) {
if (Character.isUpperCase(c)) {
bubbledOutput.append((char)(c + upperCaseOffset));
} else {
bubbledOutput.append((char)(c + lowerCaseOffset));
}
}
System.out.println(bubbledOutput.toString());
}
}
輸出
ⓗⓔⓛⓛⓞ
我想用偏移量。謝啦! – sn0wman
@ sn0wman很高興能幫到你。 –
for循環使用:
for (char i='a';i<'z';i++)
str = str.replaceAll(i,bubbled[i-'a']);
for (char i='A';i<'Z';i++)
str = str.replaceAll(i,bubbled[i-'A'+26]);
當然,這不會是太有效的,因爲字符串是不可改變的。
@Amadan修復它。 –
將bubbled
分成小寫和大寫。創建一個新的StringBuilder
,遍歷每個源的字符,如果chr >= 'a' && chr <= 'z'
追加lowercaseBubbled[chr - 'a']
,如果它的大寫範圍做類似,否則只需追加chr
。最後,在構建器上使用toString
。
或者您可以使用效率稍低的方法replaceChars
(因爲它必須使用indexOf
)在Apache Commons中找到。親:這是一個圖書館,所以沒有額外的工作給你。
這是一個代碼snipp。它不會創建一個zillion的String對象。爲了演示目的,我只有一小組泡泡字符。請調整您的喜好,並沒有錯誤處理已完成。
public class StackOverFlow {
private static int[] bubbled = {'ⓐ', 'ⓑ', 'ⓒ', 'ⓓ', 'ⓔ'};
private static int [] plain = {'a', 'b', 'c', 'd', 'e'};
private static Map<Integer, Integer> charMap = new HashMap<>();
public static void main(String[] args) {
String test = "adcbbceead";
for(int i=0; i<plain.length; i++) {
charMap.put(plain[i], bubbled[i]);
}
replaceWithBuffer(test);
}
private static void replaceWithBuffer(String test) {
System.out.println("Oginal String = " + test);
StringBuilder sb = new StringBuilder(test);
for(int i =0; i<test.length(); i++) {
int ch = sb.charAt(i);
char buubledChar = (char)charMap.get(ch).intValue();
sb.setCharAt(i, buubledChar);
}
System.out.println("New String = " + sb.toString());
}
}
輸出:
希望這有助於:)
這非常有幫助,謝謝! – sn0wman
你可以使用數組,但這是做了一大堆的另一種方式'replaceAll()'調用沒有重複的完整調用...或者你可以嘗試做一些字符數學 – awksp