【问题标题】:Insert string in beginning of another string在另一个字符串的开头插入字符串
【发布时间】:2009-09-25 06:53:35
【问题描述】:

如何在StringBuilder和String开头插入用双引号括起来的字符串?

例如:

StringBuilder _sb = new StringBuilder("Sam");

我需要在“Sam”的开头插入字符串“Hello”,O/p 是“Hello Sam”。

String _s = "Jam";

我需要在“Jam”的开头插入字符串“Hello”,O/p 是“Hello Jam”。

如何做到这一点?

【问题讨论】:

  • 你不是说,把字符串 Jam 插入到 Hello 的末尾吗?
  • 不,Jam 开头你好,_s 用 Ja​​m 初始化

标签: java string


【解决方案1】:

第一种情况是使用@987654321@方法完成的:

_sb.insert(0, "Hello ");

后一种情况可以在字符串上使用重载的 + 运算符来完成。这在幕后使用了 StringBuilder:

String s2 = "Hello " + _s;

【讨论】:

  • 你怎么知道这在幕后使用了 StringBuilder ?
  • @MasterJoe:阅读this问题!
【解决方案2】:

其他答案解释了如何在另一个StringStringBuilder(或StringBuffer)的开头插入一个字符串。

但是,严格来说,您不能将字符串插入另一个字符串的开头。 Java 中的字符串是不可变的1.

当你写作时:

String s = "Jam";
s = "Hello " + s;

您实际上正在创建一个新的String 对象,该对象是“Hello”和“Jam”的串联。您实际上根本没有将字符插入到现有的 String 对象中。


1 - 在技术上可以使用反射来打破String 对象的抽象并改变它们......即使它们是不可变的设计。但这样做是一个非常糟糕的主意。除非您知道 String 对象是通过 new String(...) 显式创建的,否则它可以被共享,或者它可以与其他 String 对象共享内部状态。最后,JVM 规范明确指出,使用反射来更改 final 的代码行为是未定义的。 String 对象的突变是危险的。

【讨论】:

    【解决方案3】:

    当然,使用StringBuilder.insert():

    _sb.insert(0, _s);
    

    【讨论】:

      【解决方案4】:
      private static void appendZeroAtStart() {
              String strObj = "11";
              int maxLegth = 5;
      
              StringBuilder sb = new StringBuilder(strObj);
              if (sb.length() <= maxLegth) {
                  while (sb.length() < maxLegth) {
                      sb.insert(0, '0');
                  }
              } else {
                  System.out.println("error");
              }
      
              System.out.println("result: " + sb);
      
          }
      

      【讨论】:

        【解决方案5】:
        import java.lang.StringBuilder;
        
        public class Program {
            public static void main(String[] args) {
        
            // Create a new StringBuilder.
            StringBuilder builder = new StringBuilder();
        
            // Loop and append values.
            for (int i = 0; i < 5; i++) {
                builder.append("abc ");
            }
            // Convert to string.
            String result = builder.toString();
        
            // Print result.
            System.out.println(result);
            }
        }
        

        【讨论】:

        • 这里没有回答原帖,它使用了Strings和StringBuilder,但是没有“在StringBuilding的开头插入一个用双引号括起来的字符串”。
        【解决方案6】:

        最好使用indexof()方法找到引号,然后在该索引后面添加一个字符串。

        string s="hai";
        int s=s.indexof(""");
        

        【讨论】:

        • 字符串不包含"
        猜你喜欢
        • 2015-02-11
        • 2020-01-06
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        • 2011-05-20
        • 2016-02-07
        • 1970-01-01
        • 2012-09-25
        相关资源
        最近更新 更多