【问题标题】:Eliminating Char from String从字符串中消除字符
【发布时间】:2016-02-07 15:58:54
【问题描述】:

我正在尝试消除“已清理”字符串中所有出现的“X”,但我不断收到出站异常。我的代码有什么问题? 我需要使用 while 循环和 int loc 来消除这种情况

    public static void main (String [] args)
    {
     String cleaned = "abcXabcXabc";
     char remove= 'X';
     int loc = cleaned.indexOf(remove);

     System.out.println ("before: "+ cleaned);

     while (loc != -1)
     {
     String part1= cleaned.substring(0, loc); 
     String part2= cleaned.substring(loc+1);
     cleaned = part1+part2;
     }

     System.out.println ("after: " + cleaned);
     }

【问题讨论】:

  • 你为什么不用replace()
  • loc = cleaned.indexOf(remove); 永远不会更新。
  • @JavaB 通过循环更新?
  • put loc = clean.indexOf(remove);循环内
  • @JavaB:你试过通过代码调试吗?如果没有那条线,除了其他任何事情之外,您如何期望循环结束?如果loc 在您第一次进入循环时不是-1,并且您没有在循环内部更改它...

标签: java string loops char


【解决方案1】:

问题在于您从未更新 loc

public static void main(String[] args)
{
    String cleaned = "abcXabcXabc";
    char remove = 'X';

    int loc;
    while ((loc = cleaned.indexOf(remove)) != 1)
    {
        String part1 = cleaned.substring(0, loc);
        String part2 = cleaned.substring(loc + 1);
        cleaned = part1 + part2;
    }

    System.out.println("after: " + cleaned);
}

while 语句中使用的表达式可能会让您有些困惑,我将尝试解释一下:

  • 在循环外部声明了 int loc;
  • 在每个循环之前,它都会获得下一个 X 分配的新索引。
  • 通过将赋值括在括号中,可以进一步使用已赋值的内容。因此,每次迭代都会将新索引分配给loc,然后检查是否为-1

当然,如果你真的愿意在一个真实的应用程序中写这样的东西,你会希望像这样使用String.replace(target, replacement)

public static void main(String[] args)
{
    String cleaned = "abcXabcXabc";
    // Notice this is now a String
    String remove = "X";

    cleaned = cleaned.replace(remove, "");

    System.out.println("after: " + cleaned);
}

【讨论】:

  • 非常感谢!这帮助很大!
【解决方案2】:
public static void main (String [] args)
{
     String cleaned = "abcXabcXabc";
     char remove= 'X';
     int loc = cleaned.indexOf(remove);
     int currentPos = 0;
     String result = "";

     System.out.println ("before: "+ cleaned);

     while (loc != -1)
     {
         result = result + cleaned.substring(currentPos,loc);
         currentPos = loc+1;
         loc = cleaned.indexOf(remove, currentPos);
     }

     System.out.println ("after: " + result);
}

这应该可以完成工作。不过你可能想看看 StringBuilder 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2016-07-26
    • 2013-09-18
    • 2011-11-22
    相关资源
    最近更新 更多