【问题标题】:insert a character before and after evrey letter in a string在字符串中的每个字母前后插入一个字符
【发布时间】:2012-02-20 06:22:25
【问题描述】:

我想在字符串中的每个字母之前插入一个% 字符,但使用 StringBuilder 来加快速度。

例如,

如果一个字符串是'AA'

then it would be '%A%A%'

如果是'XYZ'

then it would be '%X%Y%Z%'

【问题讨论】:

  • 看起来你还在字符串的开头插入了一个 % 字符。

标签: java string stringbuilder


【解决方案1】:
String foo = "VWXYZ";
foo = "%" + foo.replaceAll("(.)","$1%");
System.out.println(foo);

输出:

%V%W%X%Y%Z%

您不需要StringBuilder。编译器将使用一个在正则表达式之前为您处理简单的连接。

编辑以回应以下评论:

replaceAll() 使用Regular Expression (regex)

正则表达式(.) 表示“匹配任何字符,并给我一个引用”. 是任何字符的通配符,括号创建反向引用。第二个参数中的$1 表示“使用匹配中的反向引用#1”。

replaceAll() 继续在整个字符串上运行此表达式,将每个字符替换为自身,后跟百分号,构建一个新字符串,然后将其返回给您。

【讨论】:

  • 这个答案是最佳答案,很好。 @Brian Roach 请详细说明您的答案,例如“(.)”或“$1%”。
【解决方案2】:

试试这样的:

    String test = "ABC";
    StringBuilder builder = new StringBuilder("");
    builder.append("%");
    for (char achar : test.toCharArray()) {
        builder.append(achar);
        builder.append("%");
    }
    System.out.println(builder.toString());

【讨论】:

    【解决方案3】:
    public static String escape(String s) {
        StringBuilder buf = new StringBuilder();
        boolean wasLetter = false;
        for (char c: s.toCharArray()) {
            boolean isLetter = Character.isLetter(c);
            if (isLetter && !wasLetter) {
                buf.append('%');
            }
            buf.append(c);
            if (isLetter) {
                buf.append('%');
            }
            wasLetter = isLetter;
        }
        return buf.toString();
    }
    

    【讨论】:

      【解决方案4】:
      StringBuilder sb = new StringBuilder("AAAAAAA");
      
      for(int i = sb.length(); i >= 0; i--)
      {
          sb.insert(i, '%');
      }
      

      【讨论】:

      • 忽略您根本不想使用 StringBuilder 来执行此操作的事实,这是使用 StringBuilder 性能最差的方法。您必须为插入的每个百分比移动数据。请参阅使用 append() 的其他答案
      【解决方案5】:

      你可能会看到这个。

          String s="AAAA";
          StringBuilder builder = new StringBuilder();
          char[] ch=s.toCharArray();
          for(int i=0;i<ch.length;i++)
          {
              builder.append("%"+ch[i]);
          }
          builder.append("%");
          System.out.println(builder.toString());
      

      输出

          %A%A%A%A%
      

      【讨论】:

        【解决方案6】:

        我同意@Brian Roach 在前后添加字符,但如果您想添加任何特定字符,请这样做

        String source = "hello good old world";
        StringBuffer res = new StringBuffer();
        String[] strArr = tagList.split(" ");
        
        for (String str : strArr) {
             char[] stringArray = str.trim().toCharArray();
             stringArray[0] = stringArray[0];
             str = new String(stringArray);
             //here you need to specify your first and last character which you want to set 
             res.append("#"+ str + "$").append(" ");
         }
        
         System.out.println("Result: " + res.toString().trim());
        

        输出:- #hello$ #good$ #old$ #world$

        【讨论】:

          猜你喜欢
          • 2011-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-19
          • 2014-11-09
          • 1970-01-01
          • 2020-03-04
          • 1970-01-01
          相关资源
          最近更新 更多