2014-05-03 169 views
1

如何将字符串中的字母(例如“Hello”)替换为字母?用另一个字符串替换一个字符串的内容?

String bubbled = "ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ"; 

我最初只是做了的replaceAll(“A”,“ⓐ”),但我觉得必须有这样做的更有效的方法。

+0

你可以使用数组,但这是做了一大堆的另一种方式'replaceAll()'调用没有重复的完整调用...或者你可以尝试做一些字符数学 – awksp

回答

2

您可以使用字符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()); 
    } 
} 

输出

ⓗⓔⓛⓛⓞ

+0

我想用偏移量。谢啦! – sn0wman

+0

@ sn0wman很高兴能帮到你。 –

1

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]); 

当然,这不会是太有效的,因为字符串是不可改变的。

+0

@Amadan修复它。 –

3

bubbled分成小写和大写。创建一个新的StringBuilder,遍历每个源的字符,如果chr >= 'a' && chr <= 'z'追加lowercaseBubbled[chr - 'a'],如果它的大写范围做类似,否则只需追加chr。最后,在构建器上使用toString

或者您可以使用效率稍低的方法replaceChars(因为它必须使用indexOf)在Apache Commons中找到。亲:这是一个图书馆,所以没有额外的工作给你。

2

这是一个代码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()); 
    } 
} 

输出:

enter image description here

希望这有助于:)

+0

这非常有帮助,谢谢! – sn0wman

相关问题