Android 如何有效地替换一个或多个字符

Android 如何有效地替换一个或多个字符,android,string,replace,Android,String,Replace,我有一个用逗号分隔的字符串,如下所示 1,2,4,6,8,11,14,15,16,17,18 此字符串在用户输入时生成。假设用户想要删除任何数字,我必须重新生成没有指定数字的字符串 如果当前字符串为: 1,2,4,6,8,11,14,15,16,17,18 用户想要删除1,最后的字符串必须是: 2,4,6,8,11,14,15,16,17,18 我尝试使用以下代码实现这一点: //String num will be the number to be removed old = tv.get

我有一个用逗号分隔的字符串,如下所示

1,2,4,6,8,11,14,15,16,17,18

此字符串在用户输入时生成。假设用户想要删除任何数字,我必须重新生成没有指定数字的字符串

如果当前字符串为:

1,2,4,6,8,11,14,15,16,17,18

用户想要删除
1
,最后的字符串必须是:

2,4,6,8,11,14,15,16,17,18

我尝试使用以下代码实现这一点:

 //String num will be the number to be removed
 old = tv.getText().toString(); //old string
 newString = old.replace(num+",",""); //will be the new string

这有时可能会起作用,但对于我所展示的上述示例,它肯定不会起作用,如果我尝试删除
1
,它也会删除
11
的最后一部分,由于还存在
1

您可以
首先拆分
字符串,并检查您在其中附加的数值是否与将被删除的数值不相等

示例:

 String formated = "1,2,4,6,8,11,14,15,16,17,18";
    String []s = formated.split(",");
    StringBuilder newS = new StringBuilder();
    for(String s2 : s)
    {
        if(!s2.equals("1"))
            newS.append(s2 + ",");
    }
    if(newS.length() >= 1)
        newS.deleteCharAt(newS.length() - 1);
    System.out.println(newS);
2,4,6,8,11,14,15,16,17,18
结果:

 String formated = "1,2,4,6,8,11,14,15,16,17,18";
    String []s = formated.split(",");
    StringBuilder newS = new StringBuilder();
    for(String s2 : s)
    {
        if(!s2.equals("1"))
            newS.append(s2 + ",");
    }
    if(newS.length() >= 1)
        newS.deleteCharAt(newS.length() - 1);
    System.out.println(newS);
2,4,6,8,11,14,15,16,17,18

您可以
首先拆分
字符串,并检查附加值的数字是否与将被删除的数字不相等

示例:

 String formated = "1,2,4,6,8,11,14,15,16,17,18";
    String []s = formated.split(",");
    StringBuilder newS = new StringBuilder();
    for(String s2 : s)
    {
        if(!s2.equals("1"))
            newS.append(s2 + ",");
    }
    if(newS.length() >= 1)
        newS.deleteCharAt(newS.length() - 1);
    System.out.println(newS);
2,4,6,8,11,14,15,16,17,18
结果:

 String formated = "1,2,4,6,8,11,14,15,16,17,18";
    String []s = formated.split(",");
    StringBuilder newS = new StringBuilder();
    for(String s2 : s)
    {
        if(!s2.equals("1"))
            newS.append(s2 + ",");
    }
    if(newS.length() >= 1)
        newS.deleteCharAt(newS.length() - 1);
    System.out.println(newS);
2,4,6,8,11,14,15,16,17,18

您可以
首先拆分
字符串,并检查附加值的数字是否与将被删除的数字不相等

示例:

 String formated = "1,2,4,6,8,11,14,15,16,17,18";
    String []s = formated.split(",");
    StringBuilder newS = new StringBuilder();
    for(String s2 : s)
    {
        if(!s2.equals("1"))
            newS.append(s2 + ",");
    }
    if(newS.length() >= 1)
        newS.deleteCharAt(newS.length() - 1);
    System.out.println(newS);
2,4,6,8,11,14,15,16,17,18
结果:

 String formated = "1,2,4,6,8,11,14,15,16,17,18";
    String []s = formated.split(",");
    StringBuilder newS = new StringBuilder();
    for(String s2 : s)
    {
        if(!s2.equals("1"))
            newS.append(s2 + ",");
    }
    if(newS.length() >= 1)
        newS.deleteCharAt(newS.length() - 1);
    System.out.println(newS);
2,4,6,8,11,14,15,16,17,18

您可以
首先拆分
字符串,并检查附加值的数字是否与将被删除的数字不相等

示例:

 String formated = "1,2,4,6,8,11,14,15,16,17,18";
    String []s = formated.split(",");
    StringBuilder newS = new StringBuilder();
    for(String s2 : s)
    {
        if(!s2.equals("1"))
            newS.append(s2 + ",");
    }
    if(newS.length() >= 1)
        newS.deleteCharAt(newS.length() - 1);
    System.out.println(newS);
2,4,6,8,11,14,15,16,17,18
结果:

 String formated = "1,2,4,6,8,11,14,15,16,17,18";
    String []s = formated.split(",");
    StringBuilder newS = new StringBuilder();
    for(String s2 : s)
    {
        if(!s2.equals("1"))
            newS.append(s2 + ",");
    }
    if(newS.length() >= 1)
        newS.deleteCharAt(newS.length() - 1);
    System.out.println(newS);
2,4,6,8,11,14,15,16,17,18

你可以用这个。这是我能想到的最简单的方法:

//String num will be the number to be removed
 old=","+tv.getText().toString()+",";//old string commas added to remove trailing entries
 newString=old.replace(","+num+",",",");// will be the new string
 newString=newString.substring(1,newString.length()-1); // removing the extra commas added

这会对你想做的事情起作用。我在字符串的开头和结尾添加了一个逗号,这样您也可以删除第一个和最后一个条目。

您可以使用它。这是我能想到的最简单的方法:

//String num will be the number to be removed
 old=","+tv.getText().toString()+",";//old string commas added to remove trailing entries
 newString=old.replace(","+num+",",",");// will be the new string
 newString=newString.substring(1,newString.length()-1); // removing the extra commas added
static public String removeItemFromCommaDelimitedString(String str, String item)
{
    StringBuilder builder = new StringBuilder();
    int count = 0;

    String [] splits = str.split(",");

    for (String s : splits)
    {
        if (item.equals(s) == false)
        {
            if (count != 0)
            {
                builder.append(',');
            }
            builder.append(s);
            count++;
        }
    }
    return builder.toString();
}

这会对你想做的事情起作用。我在字符串的开头和结尾添加了一个逗号,这样您也可以删除第一个和最后一个条目。

您可以使用它。这是我能想到的最简单的方法:

//String num will be the number to be removed
 old=","+tv.getText().toString()+",";//old string commas added to remove trailing entries
 newString=old.replace(","+num+",",",");// will be the new string
 newString=newString.substring(1,newString.length()-1); // removing the extra commas added
static public String removeItemFromCommaDelimitedString(String str, String item)
{
    StringBuilder builder = new StringBuilder();
    int count = 0;

    String [] splits = str.split(",");

    for (String s : splits)
    {
        if (item.equals(s) == false)
        {
            if (count != 0)
            {
                builder.append(',');
            }
            builder.append(s);
            count++;
        }
    }
    return builder.toString();
}

这会对你想做的事情起作用。我在字符串的开头和结尾添加了一个逗号,这样您也可以删除第一个和最后一个条目。

您可以使用它。这是我能想到的最简单的方法:

//String num will be the number to be removed
 old=","+tv.getText().toString()+",";//old string commas added to remove trailing entries
 newString=old.replace(","+num+",",",");// will be the new string
 newString=newString.substring(1,newString.length()-1); // removing the extra commas added
static public String removeItemFromCommaDelimitedString(String str, String item)
{
    StringBuilder builder = new StringBuilder();
    int count = 0;

    String [] splits = str.split(",");

    for (String s : splits)
    {
        if (item.equals(s) == false)
        {
            if (count != 0)
            {
                builder.append(',');
            }
            builder.append(s);
            count++;
        }
    }
    return builder.toString();
}


这会对你想做的事情起作用。我在字符串的开头和结尾添加了逗号,这样您也可以删除第一个和最后一个条目。

正如您所注意到的,简单的字符替换很难做到这一点。相反,将各个数字分开,并在该级别上工作。然后将数字再次组合成字符串形式。正如您所注意到的,用简单的字符替换是很困难的。相反,将各个数字分开,并在该级别上工作。然后将数字再次组合成字符串形式。正如您所注意到的,用简单的字符替换是很困难的。相反,将各个数字分开,并在该级别上工作。然后将数字再次组合成字符串形式。正如您所注意到的,用简单的字符替换是很困难的。相反,将各个数字分开,并在该级别上工作。然后将这些数字再次组合成字符串形式。如果要删除“18”(字符串中的最后一项),您的解决方案将生成一个带有尾随逗号的字符串。@selbie nice catch,Edited以删除最后一个逗号如果您有另一个小错误。如果原始字符串仅包含单个项,并且该项被删除,则将调用deleteCharAt(-1)。我认为这会引发一个异常…@selbie ya,但我认为用户不会有少于1个的输入再次被很好地编辑。规则#1-假设所有来自yoru代码外部的输入都是恶意尝试使程序崩溃。如果你想删除“18”(字符串中的最后一项),您的解决方案将生成一个带有尾随逗号的字符串。@selbie nice catch,编辑为删除最后一个逗号。如果您有另一个小错误。如果原始字符串仅包含单个项,并且该项被删除,则将调用deleteCharAt(-1)。我认为这会引发一个异常…@selbie ya,但我认为用户不会有少于1个的输入再次被很好地编辑。规则#1-假设所有来自yoru代码外部的输入都是恶意尝试使程序崩溃。如果你想删除“18”(字符串中的最后一项),您的解决方案将生成一个带有尾随逗号的字符串。@selbie nice catch,编辑为删除最后一个逗号。如果您有另一个小错误。如果原始字符串仅包含单个项,并且该项被删除,则将调用deleteCharAt(-1)。我认为这会引发一个异常…@selbie ya,但我认为用户不会有少于1个的输入再次被很好地编辑。规则#1-假设所有来自yoru代码外部的输入都是恶意尝试使程序崩溃。如果你想删除“18”(字符串中的最后一项),您的解决方案将生成一个带有尾随逗号的字符串。@selbie nice catch,编辑为删除最后一个逗号。如果您有另一个小错误。如果原始字符串仅包含单个项,并且该项被删除,则将调用deleteCharAt(-1)。我认为这会引发一个异常…@selbie ya,但我认为用户不会有少于1个的输入哦,再次经过良好编辑。规则#1-假设所有来自YRU代码外部的输入都是恶意尝试使程序崩溃。这可能是最简单的想法!!!我认为这个方法比将字符串拆分为数组然后在数组中搜索更好!!谢谢你的想法,它的逻辑也有一些问题:)所以我用前面的空格分隔数字,并试图替换它。。它起作用了perfectly@Shan你能告诉我你遇到的问题吗?@4aRkKn1gh7哎呀,我想不起确切的问题了,但我记得:当我尝试t
static public String removeItemFromCommaDelimitedString(String str, String item)
{
    StringBuilder builder = new StringBuilder();
    int count = 0;

    String [] splits = str.split(",");

    for (String s : splits)
    {
        if (item.equals(s) == false)
        {
            if (count != 0)
            {
                builder.append(',');
            }
            builder.append(s);
            count++;
        }
    }
    return builder.toString();
}