当前位置: 首页 > 知识库问答 >
问题:

将数字字替换为数字

吕向荣
2023-03-14

我正在尝试将所有数字单词0-9替换为字符串中相应的数字0-9。

我已经创建了数字单词和数字的两个数组,然后尝试使用替换循环来更改句子。

不确定我做错了什么。

我正在引用我的GetNodeDigitWordString方法。

import java.util.*;
public class StringProcessor {
private String noSpaces;
private String input, noVowels;
private String noDigitWords;
private int numOfWords = 0, uppercaseLetters = 0,
            numOfDigits = 0, digitWords = 0;
private String [] wordDigits = {"zero","one", "two", "three","four",
        "five", "six", "seven", "eight", "nine"};
private String [] digits = {"0", "1", "2", "3", "4",
        "5", "6", "7", "8", "9"};


public StringProcessor()
{
    input = "";
}

public StringProcessor(String s)
{
    StringTokenizer str = new StringTokenizer(s);
    numOfWords = str.countTokens();

    for (int i = 0; i < s.length(); i++)
    {
        if (Character.isUpperCase(s.charAt(i)))
            uppercaseLetters++;
    }

    for (int i = 0; i < s.length(); i++)
    {
        if (Character.isDigit(s.charAt(i)))
            numOfDigits++;
    }

    String [] strSplit = s.split(" ");
    for(int i = 0; i < strSplit.length; i++)
    {
        for (int j = 0; j < wordDigits.length; j++)
        {
            if (strSplit[i].equalsIgnoreCase(wordDigits[j]))
                    digitWords++;
        }
    }


    noSpaces = s.replace(" ","");
    noVowels = s.replaceAll("[aeiou]", "-");

    for(int i = 0; i < 10; i++)
    {
        noDigitWords = s.replace("wordDigits[i]", "digits[i]");
    }
}

public void setString(String s)
{
    input = s;
}

public String getString()
{
    return input;
}

public int wordCount()
{
    return numOfWords;
}

public int uppercaseCount()
{
    return uppercaseLetters;
}

public int digitCount()
{
    return numOfDigits;
}

public int digitWordCount()
{
    return digitWords;
}

public String getNoSpaceString()
{
    return noSpaces;
}

public String getNoVowelString()
{
    return noVowels;
}

public String getNoDigitWordString()
{
    return noDigitWords;
}

public static void main(String[] args)
{
    String input;
    Scanner keyboard = new Scanner(System.in);

    System.out.print("Enter a line of text: ");
    input = keyboard.nextLine();

    StringProcessor str = new StringProcessor(input);

    System.out.println("words: " + str.wordCount());
    System.out.println("uppercase: " + str.uppercaseCount());
    System.out.println("digits: " + str.digitCount());
    System.out.println("digit words " + str.digitWordCount());
    System.out.println("line with no spaces: " + str.getNoSpaceString());
    System.out.println("line with vowels replaced: " + str.getNoVowelString());
    System.out.println("line with digit words replaced: " + str.getNoDigitWordString());
}
}

谢谢

共有3个答案

公孙新觉
2023-03-14

每次以下代码调用replace方法时,字符串noDigitWords都会被覆盖。

for(int i = 0; i < 10; i++)
{
    noDigitWords = s.replace("wordDigits[i]", "digits[i]");
}

在循环的最后一次迭代之后,字符串“one nine”会变成“one 9”,而不是所需的“19”。解决方案是对循环上一次迭代的返回值调用replace方法。将字符串noDigitWords初始化为字符串s的值。每次迭代都在noDigitWords上进行替换,如下所示。

noDigitWords = s;
for(int i = 0; i < 10; i++)
{
    noDigitWords = noDigitWords.replace(wordDigits[i], digits[i]);
}
易超
2023-03-14

除了@dcharms指出的问题,这是行不通的:

for(int i = 0; i < 10; i++)
{
    noDigitWords = s.replace(wordDigits[i], digits[i]);
}

发生的情况如下:首先,您搜索s以查找“零”,然后调用s.replace。这将返回一个字符串,其中单词“零”替换为“0”。然后,该字符串被分配给noDigitWords。但是s本身并没有改变。

然后,下一次通过循环,您在原始s中搜索下一个单词。您在之前迭代中所做的工作,即在noDigitWords中所做的工作,被丢弃了。

结果将是,您搜索的最后一个单词,“nine”,应该被替换。但你做的任何其他替代品都会被扔掉。

羊舌勇
2023-03-14

这就是你要找的:

noDigitWords = s;
for(int i = 0; i < strSplit.length; i++)
{
    for (int j = 0; j < wordDigits.length; j++)
    {
        if (strSplit[i].equalsIgnoreCase(wordDigits[j])){
            noDigitWords = noDigitWords.replace(strSplit[i], digits[j]);
            break;
        }
    }
}

而不是这个:

for(int i = 0; i < 10; i++)
{
    noDigitWords = s.replace("wordDigits[i]", "digits[i]");
}
 类似资料:
  • 我有每月的列值编号。 <代码>df 我想将其转换为: 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月, 2月, 3月 有人能帮我吗? 提前感谢您抽出宝贵时间

  • 我正在自己学习Java,并使用在线练习进行练习。到目前为止,我只学到了直到方法,所以在这个练习中使用数组超出了我的范围,即使一些在线解决方案使用数组来做我想做的事情。 练习是这样的:让用户输入一个带有元音的字符串。只要有元音字母,就将该元音显示为大写字母。 例如:如果用户输入“苹果”,正确的输出是苹果 到目前为止,我有这段代码: 当我运行我的代码时,例如,输入字符串“苹果”,我得到“苹果”作为我的

  • 所以我是计算机科学的新手,我们被要求做的一件事是尝试创建一个程序,首先将用户输入的一个单词转换成一个数字串,a=1,b=2,z=26等等,还有一些其他的事情,因为它们是扩展,我现在不想讨论。诚然,她说她不介意我们完成它,因为这是我们今天的第一节java课程。 有鉴于此,有人能给我一些关于如何做到这一点的建议吗?我不想让一段完整的代码完全做到这一点,因为我需要学习,因此非常感谢指导之手。到目前为止,

  • 问题内容: 我有一个数据库,其中的列包含数字格式的值,例如: 在浏览器中显示时,它应该显示5k表示5000,86.6k表示86600等。我需要php中的代码。如果有任何内置函数可以执行此操作,请提及它。 问题答案: 如果将它们作为数字,则可以直接使用此功能。 如果您没有数字,请使用PHP:取消格式化 对于您的特殊情况,您可能会使用一些肮脏的技巧,但是如果您有其他特殊情况,我不建议您这样做。

  • 我想比较两个表达式。我从数据库中获得了数字字符串形式的数据数组,我需要将其转换为数字,然后再使用ngClass为样式设置提供条件。如何转换此类型。有什么想法吗?

  • 我希望使用正则表达式尝试删除字符串中的所有非字母数字字符,并用 我只想允许基本上按字母顺序排列的单词A-Z和 这是专门准备字符串成为URL的一部分,因此需要符号而不是空格。 我已经查看了< code>/\W /,但是这将删除所有空格和字母数字字符,而我希望尽可能保留空格,然后用符号替换。 我已经搜索了一下,但我似乎找不到一些东西,我希望有人能对此有任何简单的建议。 示例字符串