Java 如何删除x处的字符?

Java 如何删除x处的字符?,java,Java,如何删除x处的字符并保留其余字符?输出应为12345678,在x打开的位置删除每一个“9”。X是i*i+1/2,因此该数字将添加到下一个数字。所以每个数字在0,1,3,6,10,15,21,28,等等 public class removeMysteryI { public static String removeMysteryI(String str) { String newString = ""; int x=0; fo

如何删除x处的字符并保留其余字符?输出应为12345678,在x打开的位置删除每一个“9”。X是i*i+1/2,因此该数字将添加到下一个数字。所以每个数字在0,1,3,6,10,15,21,28,等等

public class removeMysteryI {
    public static String removeMysteryI(String str) {
       String newString = "";
       int x=0;
       for(int i=0;i<str.length();i++){
        int y = (i*(i+1)/2)+1;
        if(y<=str.length()){
            x=i*(i+1)/2;
            newString=str.substring(0, x) + str.substring(x + 1);            
        }
       }
        return newString;
    }
    
    
    public static void main(String[] args) {
        String str = "9919239456978";
        System.out.println(removeMysteryI(str));
    }
}

按照以下步骤操作:

使用builderIndexToDelete=0初始化 使用计数器=1初始化 重复以下步骤,直到索引有效: 删除builderIndexToDelete处的字符 将builderIndexToDelete更新为计数器-1-1,因为每个迭代中都会删除一个字符 递增计数器 公共静态字符串DeleteNaturalSumindexeString str{ StringBuilder=新StringBuilderstr; int计数器=1; int builderIndexToDelete=0; 而builderIndexToDelete 使用@StephenC建议改进性能 公共静态字符串DeleteNaturalSumindexeString str{ StringBuilder=新的StringBuilder; int nextNum=1; int indexToDelete=0; 而indexToDelete好的,代码中有几个错误。一个很容易修复。其他的就不那么容易了

首先是简单的一点:

 newString=str.substring(0, x) + str.substring(x + 1); 
好的,这就是创建一个字符串,删除了位置x处的字符。问题是它在做什么。str变量是输入参数。因此,在一天结束时,newString仍然只会是删除一个字符的str

以上内容实际上需要对上一个循环迭代中的字符串进行操作。。。如果要删除多个字符

当您试图解决第一个问题时,会出现下一个问题。从字符串中删除字符时,删除点之后的所有字符都将重新编号;e、 g.删除5处的字符后,6处的字符变为5处的字符,7处的字符变为6处的字符,依此类推

因此,如果要通过剪切字符串来删除字符,则需要确保剪切位置的索引已根据已删除的字符数进行调整

那是可以做到的。。。但是你需要考虑一下

最后一个问题是效率。每次您的当前代码如上所述删除一个字符时,实际上是将所有剩余字符复制到一个新字符串中。对于小字符串,这没关系。对于非常大的字符串,重复复制可能会对性能产生严重影响1

解决方法是使用不同的方法删除字符。复制要保留的字符,而不是剪掉要丢弃的字符。StringBuilder类是实现这一点的一种方法2。如果不允许使用它,那么可以使用char数组和索引变量来跟踪数组中的append位置。最后,还有一个字符串构造函数,它可以从char[]的相关部分创建字符串

我将把细节留给你来解决

1-效率可被视为超出了本次活动的范围。
2-@Horse的答案使用了StringBuilder,但与我的建议不同。这也会遇到重复复制问题,因为每次deleteCharAt调用都会复制删除点之后的所有字符。

您能添加更多详细信息吗?x是什么意思?y的意思是什么?@peer和x是一样的,但是如果在If语句之外有x,那么它将超出字符串的长度。我把它放在那里是为了让它和字符串保持相同的长度。@Horse x是字符串中我想删除的每个位置。所以应该是0,1,3,6,10。str.replace9有什么问题吗?,非常感谢。你能解释一下吗?请注意
对学生来说,这种解决方案不会帮助他们学习。如果你能帮助他们理解他们做错了什么,那会更有帮助,这样他们就能学会自己解决这些问题。@StephenC谢谢你。我将添加更多的解释,并帮助他们确定实际问题谢谢您分享有关优化。