gpt4 book ai didi

java - 在java中替换字符串中的数字

转载 作者:行者123 更新时间:2023-12-02 06:30:04 32 4
gpt4 key购买 nike

我正在尝试找出一种用其他字符串安全地替换字符串中的整数的方法。基本上输入将是一个字符串,例如“1 OR 2 AND 3”。然后我还会得到一个字符串列表。在本例中,它将是一个包含 3 个字符串的列表。例如,“名称 = 1”、“名称 = 2”和“名称 = 3”。

然后我需要用字符串替换整数。

下面是一个例子:

import java.text.MessageFormat;

public class TestStringBuilder
{
public static void main(String[] args)
{
TestStringBuilder builder = new TestStringBuilder();
String output;
String[] filters = { "Name = 1", "Name = 2", "Name = 3" };
output = builder.buildString(filters);
System.out.println(output);
output = builder.formatString(filters);
System.out.println(output);
System.out.println();

/* Now swap around first two strings */
String[] filters2 = { "Name = 2", "Name = 1", "Name = 3" };
output = builder.buildString(filters2);
System.out.println(output);
output = builder.formatString(filters2);
System.out.println(output);
}

private String formatString(Object[] filters)
{
/* Wrap integers in {} here first */
String advanced = "{1} OR {2} OR {1}";
return MessageFormat.format(advanced, filters);
}

private String buildString(String[] filters)
{
String advanced = "1 OR 2 OR 1";
/*
* Now replace the numbers with the actual filters in human readable
* form. Note: We loop from 10 to 1 so that 10 is replaced first. If we
* loop from 1 to 10, 1 will replace 1 and 10 incorrectly.
*/
for (int i = filters.length; i > 0; i--)
{
/* Index for 0 based array */
String filter = filters[i - 1];
if ((filter != null) && (filter.length() > 0))
{
advanced = advanced.replaceAll(Integer.toString(i), filter);
}
}
return advanced;
}
}

首先,我只做了一个简单的 String.replaceAll。问题是,如果我输入的字符串包含整数,则它可能会被替换。

例如

我使用字符串数组String[]filters = { "Name = 1", "Name = 2", "Name = 3"};

这工作正常,输出是:

名称 = 1 或名称 = 2 或名称 = 1

但是,如果我使用 String[]filters = { "Name = 2", "Name = 1", "Name = 3"};

输出不正确,因为“Name = 1”中的 1 也被替换:

姓名 = 2 或姓名 = 姓名 = 2 或姓名 = 2

然后我尝试使用 java.Text.FormatMessage。但是,在这种情况下,我需要循环遍历字符串以首先将所有整数包装在 {} 中,然后创建一个第一个值为空的新 Object[]。这是运行上述示例的输出:

姓名 = 2 或姓名 = 3 或姓名 = 2

姓名 = 1 或姓名 = 3 或姓名 = 1

还有人有其他想法吗?

最佳答案

您可以使用正则表达式(Pattern):

public static String format(String input, String[] args) {
StringBuffer sb = new StringBuffer();

Matcher matcher = Pattern.compile("\\d+").matcher(input);
while (matcher.find()) {
int nr = Integer.parseInt(matcher.group());
if (nr <= args.length) {
matcher.appendReplacement(sb, Matcher.quoteReplacement(args[nr - 1]));
}
}

matcher.appendTail(sb);

return sb.toString();
}

关于 Java 正则表达式的一个很好的教程可以在这里找到:http://tutorials.jenkov.com/java-regex/matcher.html

关于java - 在java中替换字符串中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20150536/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com