is there a way to use tr/// (or equivalent) in java?

后端 未结 3 426
醉话见心
醉话见心 2020-12-06 16:21

I would like to know if there is an equivalent to tr/// (as used in Perl) in Java. For example, if I wanted to replace all \"s\"s with \"p\"s in \"mississippi\" and vice ver

相关标签:
3条回答
  • 2020-12-06 17:03

    Depending on how static your replacement is, you could do

    char[] tmp = new char[str.length()];
    for( int i=0; i<str.length(); i++ ) {
      char c = str.charAt(i);
      switch( c ) {
        case 's': tmp[i] = 'p'; break;
        case 'p': tmp[i] = 's'; break;
        default: tmp[i] = c; break;
      }
    }
    str = new String(tmp);
    

    If the replacements need to vary at runtime, you could replace the switch with a table lookup (if you know that all the codepoints you need to replace fall into a limited range, such as ASCII), or, if everything else fails, a hashmap from Character to Character.

    0 讨论(0)
  • 2020-12-06 17:05

    Commons' replaceChars may be your best bet. AFAIK there's no replacement (ar ar) in the JDK.

    0 讨论(0)
  • 2020-12-06 17:16

    As @Dave already pointed out the closest replacement is

    Apache Commons StringUtils.replaceChars(String str, String searchChars, String replaceChars)

    Excerpt of the description:

    ...
    StringUtils.replaceChars(null, *, *)           = null
    StringUtils.replaceChars("", *, *)             = ""
    StringUtils.replaceChars("abc", null, *)       = "abc"
    StringUtils.replaceChars("abc", "", *)         = "abc"
    StringUtils.replaceChars("abc", "b", null)     = "ac"
    StringUtils.replaceChars("abc", "b", "")       = "ac"
    StringUtils.replaceChars("abcba", "bc", "yz")  = "ayzya"
    StringUtils.replaceChars("abcba", "bc", "y")   = "ayya"
    StringUtils.replaceChars("abcba", "bc", "yzx") = "ayzya"
    ...
    
    0 讨论(0)
提交回复
热议问题