Java 代码的以下部分扫描给定的字符串以查找数字序列(单独的或分组的)。但我发现的问题是我需要将数字的名称写为单独的而不是分组的。也就是说,如果字符串有 “Hello78,我的名字是 number07 而不是 number1”
,而不是打印为 “七十八”
,我怎样才能让它成为 “七八”
?
Pattern patternString = Pattern.compile("\\d+");
String inputText = "32h28ello12'34' this is a test89 87";
Matcher findNumber = patternString.matcher(inputText);
Scanner findText = new Scanner(inputText);
findText.useDelimiter("[^\\p{Alnum},\\.-]");
int counter = 0;
List<String> list = new ArrayList<>();
while (findNumber.find()) {
list.add(findNumber.group());
System.out.println(findNumber.group(0));
}
所以,这是一个输出示例,仅供指导:
32
28
12
34
89
87
-----------------------------------------------
LIST: [32, 28, 12, 34, 89, 87]
32h28ello12'34' this is a test89 87
-----------------------------------------------
我正在使用下面的行继续测试并替换文本的数字,但后来我意识到我需要替换该位置的整个数字。也就是说,如果它是 30,则文本是“三零”
,而不是单独的“三”
或单独的“零”
。
numString = inputText.replace(Character.toString(inputText.charAt(atPos)), one);
我的一些想法是,例如,将每个输出数字放入另一个变量中,将其读回,然后将其拆分(每个)并写入数字的名称,但我不知道该怎么做。任何想法将不胜感激。
最佳答案
如果您期望 “HelloSeven Even,我的名字...”
作为您的输出,那么您可以使用以下内容:
String[] numberTexts = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
StringBuilder builder = new StringBuilder();
String inputText = "32h28ello12'34' this is a test89 87";
for (int i=0; i < inputText.length(); i++) {
char c = inputText.charAt(i);
if (Character.isDigit(c)) {
String numberText = numberTexts[Character.getNumericValue(c)];
builder.append(numberText);
// append space if next character is a digit
if (i < inputText.length() - 1 && Character.isDigit(inputText.charAt(i+1))){
builder.append(" ");
}
} else {
builder.append(c);
}
}
System.out.println(builder.toString());
此处,inputText
会针对所有字符进行迭代,并且数字将替换为其文本。如果下一个字符是数字,则附加一个空格字符。
关于java - 在 Java 中将数字从字符串转换为文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46087169/