在Java中将数字从字符串转换为文本
Java代码的以下部分扫描给定的字符串,以查找单个或分组的数字序列。但我发现的问题是,我需要将数字的名称写为单独的,而不是分组的。也就是说,如果字符串有在Java中将数字从字符串转换为文本,java,Java,Java代码的以下部分扫描给定的字符串,以查找单个或分组的数字序列。但我发现的问题是,我需要将数字的名称写为单独的,而不是分组的。也就是说,如果字符串有“Hello78,我的名字是number07而不是number1”,而不是打印为“七十八”,我如何将其设置为“七八” 我使用下面的行继续测试并替换文本的数字,但是我意识到我需要替换该位置的整数。也就是说,如果它是30,那么文本是“三个零”,而不是“三个”,或者“零” numString = inputText.replace(Character.
“Hello78,我的名字是number07而不是number1”
,而不是打印为“七十八”
,我如何将其设置为“七八”
我使用下面的行继续测试并替换文本的数字,但是我意识到我需要替换该位置的整数。也就是说,如果它是30,那么文本是“三个零”
,而不是“三个”
,或者“零”
numString = inputText.replace(Character.toString(inputText.charAt(atPos)), one);
例如,我有一些想法,把每个输出数字放在另一个变量中,读回,然后拆分(每个)并写下数字的名称,但我不知道怎么做。任何想法都将受到欢迎。使用StringBuilder,而不是不断创建新的中间字符串
StringBuilder sb = new StringBuilder();
for ( char c : inputText ) {
switch (c) {
case '0':
sb.append("zero ");
break;
// similar for '1 thru '9'
default:
sb.append(c);
break;
}
}
String output = sb.toString();
使用StringBuilder,而不是不断创建新的中间字符串
StringBuilder sb = new StringBuilder();
for ( char c : inputText ) {
switch (c) {
case '0':
sb.append("zero ");
break;
// similar for '1 thru '9'
default:
sb.append(c);
break;
}
}
String output = sb.toString();
使用映射
:
outputString
将具有hellosevenight,在上述任一解决方案中,我的名字是numberzeroseven,而不是numberone
您需要处理单词开头/结尾的空格。使用Map
:
outputString
将具有hellosevenight,在上述任一解决方案中,我的名字是numberzeroseven,而不是numberone
您需要处理单词开头/结尾的空格。如果您希望输出为
“HelloSeven-Eight,my name…”
,则可以使用此选项:
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());
String[]numberTexts={“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”};
StringBuilder=新的StringBuilder();
字符串inputText=“32h28ello12'34”这是一个test89 87”;
对于(int i=0;i
此处对所有字符迭代
inputText
,并用其文本替换数字。如果下一个字符是一个数字,则会附加一个空格。如果您希望输出为“HelloSeven-Eight,my name…”
,则可以使用此选项:
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());
String[]numberTexts={“零”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”};
StringBuilder=新的StringBuilder();
字符串inputText=“32h28ello12'34”这是一个test89 87”;
对于(int i=0;i
此处对所有字符迭代
inputText
,并用其文本替换数字。如果下一个字符是数字,则会追加一个空格。您应该逐字符迭代字符串,如果字符值介于49和57之间,请使用switch case语句将字符值打印为字符串!我是这样想的,但这意味着要写很多代码(只是寻找替代方案)。不确定开关箱的使用情况。你有这个例子吗?浏览一下你的字符串中的字符;使用Character.isDigit(ch)
测试每个字符,看它是否是数字。如果没有,只需将其附加到结果字符串中。如果是数字,请使用Character.digit(ch,10)
获取其数值,然后使用该值对包含数字名称的String
s数组进行索引,并将该文本附加到结果中。为什么不使用Map
将10位字符作为键,并将对应的字符串作为值。然后只需遍历字符串并用map中关联的值替换数字??您应该逐字符迭代字符串,如果字符值介于49和57之间,则使用switch case语句将字符值打印为字符串!我是这样想的,但这意味着要写很多代码(只是寻找替代方案)。不确定开关箱的使用情况。你有这个例子吗?浏览一下你的字符串中的字符;使用Character.isDigit(ch)
测试每个字符,看它是否是数字。如果没有,只需将其附加到结果字符串中。如果是数字,请使用Character.digit(ch,10)
获取其数值,然后使用该值对包含数字名称的String
s数组进行索引,并将该文本附加到结果中。为什么不使用Map
将10位字符作为键,并将对应的字符串作为值。然后只需遍历字符串并用map中关联的值替换这些数字??当有一个数字时,这不会有额外的空间吗?使用StringJoiner
,同样的好处是,您不需要修剪结果文本。当有一个数字时,这不会有额外的空间吗?使用StringJoiner
,同样的好处,你将不需要修剪产生的文本我认为这可能会工作!非常感谢,也感谢其他人。
String[] array = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
String inputString = "Hello78, my name is number07 and not number1";
StringBuilder builder = new StringBuilder();
for (int i = 0; i < inputString.length(); i++) {
if (Character.isDigit(inputString.charAt(i))) {
builder.append(array[Character.digit(inputString.charAt(i), 10)]);
} else {
builder.append(inputString.charAt(i));
}
}
String outputString = builder.toString();
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());