【问题标题】:Java Changing Part of String with Specific Character [closed]Java用特定字符更改字符串的一部分[关闭]
【发布时间】:2012-10-25 13:00:02
【问题描述】:

我试图从点(a,b)中取出字符串的一部分,并将字符串中给定值的字母替换为“X”。

示例:如果字符串为ABC123,并且调用了switch(3,5),则将其更改为ABCXXX

到目前为止我有:

  public void switch(int p1, int p2)
{
   String substring = myCode.substring(p1,p2-1);
}

我很迷茫....感谢您的帮助!

【问题讨论】:

  • 应该是XXX部分还是返回词是预定义词?应该始终是 XXX,或者有时是 XYZ 或 WXY?
  • 你不能将你的方法命名为switch。这是Java中的保留关键字

标签: java string methods replace substring


【解决方案1】:

Java Strings 是不可变的,无法更改。但是,您可以编写一个返回 new String 并标出这些字符的方法。 StringBuilder 是一个让您熟悉的好类,因为它允许快速字符串操作。

StringBuilder 文档:http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

public class StringReplace {

    public static String replaceRange(String s, int start, int end){
        StringBuilder b = new StringBuilder(s);

        for(int i = start; i <= end; i++)
            b.setCharAt(i, 'x');

        return b.toString();
    }

    public static void main(String[] args){
        String test = "mystringtoreplace";
        String replaced = replaceRange(test, 3, 8);
        System.out.println(replaced);
    }

}

【讨论】:

  • 我理解这一点,但这种方法适用于只能有两个参数(int、int)的对象。我试图替换的子字符串来自另一个类中创建的对象。
  • 听起来您正在尝试更新引用而不是修改实际字符串。在此示例中,您可以直接执行 test = replaceRange(test, 3, 8) 而不是创建新的 String replaced,这将更新您的参考。因此,您的方法可能只需要一个 startend 变量,此时您可以执行 myVar = replaceRange(myVar, start, end);
【解决方案2】:

使用StringBuilder 及其replace(int start, int end, String str) 方法

【讨论】:

    【解决方案3】:

    只需为左侧和右侧部分(您要保留)做两个子字符串,然后用适当数量的 X 将它们连接起来。

    【讨论】:

      【解决方案4】:

      一些可能有帮助的步骤:

      1. 确定需要更改的字符数
      2. 确定要保留的字符串的左侧 (str.substring(0,p1);)
      3. 确定要保留的字符串的右侧 (str.substring(p2,str.length());)
      4. 把它们放在一起 (String output = firstPart + addedChars + secondPart;)

      【讨论】:

        【解决方案5】:

        试试这个:

        public class Sub {
        
            public String replaceChar(String str, int x, int y){
                String temp = "XXX";
                String str1 = "";
                str1 = str.substring(x, y+1);
                str = str.replace(str1, temp);
                return str;
            }
        
            public static void main(String args[]){
                Sub s = new Sub();
                System.out.println(s.replaceChar("ABC123", 3, 5));
            }
        
        }
        

        【讨论】:

        • A) 不要只给他们代码。为他们提供完成工作所需的工具。 B) 为问题制定正确的格式(“这是您需要做的,这是一种方法:插入代码。这适用于插入描述)跨度>
        • 我试过了,它成功了格式不是这个???
        • 问题呈现方式的格式
        • 我根据问题进行了格式化,顺便说一句,很多帖子都有纯代码,没有人有义务..这个论坛的最后一步是互相帮助..并得到正确的答案..这正是我做到了..当你格式化为相同代码的句子时,我格式化为代码感知......请对那些试图帮助的人更好......
        • A) 这不是一个论坛。不信,继续 Meta。 B)目标是帮助其他人提高他们的编码能力,而不是给他们代码而忽略其他任何东西。 C) 至少尽量保持专业,我不是在攻击你。 D)我不是在攻击你的答案,只是想让它更好地适应 SO 的含义。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        • 2022-01-27
        • 2020-06-14
        相关资源
        最近更新 更多