Java 如何用特定值替换所有数字字符?

Java 如何用特定值替换所有数字字符?,java,io,Java,Io,我想用特定值替换字符串中的所有数字 测试字符串:-SD12431;ABC333 如何识别数字块,尤其是用(动态)新值替换它们 例如,更换后: -SDfirst;ABCsecond?如果在循环中使用该方法,则该方法将允许您执行此操作 String myNewString = myString.replaceFirst("\\d+","first"); 如果循环使用this语句,每次调用replaceFirst()都会将第一组数字替换为作为第二个参数提供的任何数字。您可以执行以下操作: yourS

我想用特定值替换字符串中的所有数字

测试字符串:
-SD12431;ABC333

如何识别数字块,尤其是用(动态)新值替换它们

例如,更换后:
-SDfirst;ABCsecond

如果在循环中使用该方法,则该方法将允许您执行此操作

String myNewString = myString.replaceFirst("\\d+","first");

如果循环使用this语句,每次调用
replaceFirst()
都会将第一组数字替换为作为第二个参数提供的任何数字。

您可以执行以下操作:

yourString = yourString.replaceFirst("\\d+",firstString).replaceFirst("\\d+",secondString);  //and so on
或者使用一个循环,如果它更适合您的需要

您可以这样做

    StringBuffer sb = new StringBuffer();
    Matcher m = Pattern.compile("\\d+").matcher(str);
    int n = 0;
    while(m.find()) {
        if (++n == 1) {
            m.appendReplacement(sb, "first");
        } else {
            m.appendReplacement(sb, "second");
        }
    }
    m.appendTail(sb);
    s = sb.toString();

您可以使用String类的replaceFirst(stringregex,stringreplacement)函数

因此,在第一个参数中,您必须使用正则表达式来查找数字,例如:

  • “[0-9]”将查找单个数字
  • “[0-9]+”将找到一个或多个数字

    String testString = "-SD12431;ABC333";
    ArrayList<String> remplaceBy= new ArrayList<String>();
    remplaceBy.add("first");
    remplaceBy.add("second");
    remplaceBy.add("third");
    
    String newString = testString;
    String oldString ="";
    int i =0;
    while(!newString.equals(oldString))
    {
    oldString = new String(newString);
    newString = newString.replaceFirst("[0-9]+",remplaceBy.get(i));
    i++;
    System.out.println("N1:"+newString);
    System.out.println("O1:"+oldString); 
    }
    System.out.println("New String"+newString);
    
    String testString=“-SD12431;ABC333”;
    ArrayList remplaceBy=新的ArrayList();
    remplaceBy.添加(“第一”);
    remplaceBy.添加(“第二”);
    remplaceBy.添加(“第三”);
    字符串newString=testString;
    字符串oldString=“”;
    int i=0;
    而(!newString.equals(oldString))
    {
    oldString=新字符串(newString);
    newString=newString.replaceFirst(“[0-9]+”,remplaceBy.get(i));
    i++;
    System.out.println(“N1:+newString”);
    System.out.println(“O1:+oldString”);
    }
    System.out.println(“新字符串”+新闻字符串);
    

您尝试过正则表达式吗?是的,我当然可以将数字与
\\d+
匹配,但如何基于此拆分字符串?您可以使用Pattern.split或Matcher在匹配的序列中进行迭代。您在这里到底想做什么?您的字符串是否总是看起来像
-StringNumber;字符串编号
?这个映射应该如何工作?您是否在某个地方有一些预定义的
first
second
值?您需要写入\\d而不是\d:)这两种方法都可以,或者
StringBuffer
或者
test=test.replaceFirst(标记“first”)。你会认为某人优先于循环替换吗?1个原因是性能(如果重要的话);2-可能更灵活(如果需要);否则我会使用replaceFirst,因为这是一行解决方案。如果使用
replaceAll()
,就不能像问题所问的那样,用不同的替换替换替换原始字符串的不同部分。您的示例使用了
replaceFirst()