0

如何用另一组带有垂直线的数字替换数字

例如,我得到一组数字如下

"118|142|4000000|99|8|1372055573|0"
"119|12|600|9|8|1866573|0"
"120|126|85600|9|8|1866573|0"

我想将所有数字从末尾替换为"x|y|2900|99|20|99999999|0" both xy仍然是相同的数字。

然后运行代码后,总结是

"118|142|2900|99|20|99999999|0"
"119|12|2900|99|20|99999999|0"
"120|126|2900|99|20|99999999|0"
4

4 回答 4

1

这是一个简单的解决方案

    String str[] = new String[]{"118|142|4000000|99|8|1372055573|0", "119|12|600|9|8|1866573|0"};
    String[] oldTokens = str[0].split("[|]");
    String[] newTokens = str[1].split("[|]");
    StringBuffer strBuff = new StringBuffer();
    for(int i = 0 ; i < newTokens.length ; i ++) {
        if(i < 2)
            strBuff.append(oldTokens[i]);
        else strBuff.append(newTokens[i]);
        if(i < newTokens.length) {
            strBuff.append("|");
        }
    }
    System.out.println(strBuff.toString());
于 2013-10-10T07:15:30.863 回答
1

正则表达式可以满足您的需求:

"((?:[^|]+\|){2})[^"]+"

正则表达式可视化

Debuggex可视化

替换为:

"$12900|99|20|99999999|0"

RegExr上的演示

爪哇使用:

String in = "\"118|142|4000000|99|8|1372055573|0\",\"119|12|600|9|8|1866573|0\",\"120|126|85600|9|‌​8|1866573|0\"";
String out = in.replaceAll("\"((?:[^|]+\\|){2})[^\"]+\"", "\"$12900|99|20|99999999|0\"");
于 2013-10-10T07:35:08.740 回答
0

这是一个简单的解决方案。但是这段代码是可重用的。你可以随心所欲地使用它。

String original  = "118|142|4000000|99|8|1372055573|0";
String toFind    = "4000000|99|8|1372055573|0";
String toReplace = "2900|99|20|99999999|0";
int ocurrence    = 1;
String replaced  = replaceNthOcurrence(original, toFind, toReplace,ocurrence);
System.out.println(replaced);

的功能代码replaceNthOcurrence

public static String replaceNthOcurrence(String str, String toFind, String toReplace, int ocurrence) {
Pattern p = Pattern.compile(Pattern.quote(toFind));
Matcher m = p.matcher(str);
StringBuffer sb = new StringBuffer(str);
int i = 0;
while (m.find()) {
if (++i == ocurrence) { sb.replace(m.start(), m.end(), toReplace); break; }
}
return sb.toString();
}
于 2013-10-10T07:29:45.357 回答
0

Apache Commons Lang 有一个 StringUtils 类,它有一个连接函数,它将数组连接在一起以形成一个字符串。

这是一个带有一行的示例

public class Test {
    public static void main() {
        String s = "118|142|4000000|99|8|1372055573|0";

        String[] parts = s.split("|");

        parts[2] = "2900";
        parts[3] = "99";
        parts[4] = "20";
        parts[5] = "99999999";
        parts[6] = "0";

        String newString = StringUtils.join(parts, "|");    
    }

}
于 2013-10-10T07:06:30.247 回答