java - java文本处理器赋值setString方法

标签 java

我无法弄清楚为什么我的 setMethod 不起作用。当我使用它时,我的主要方法不显示任何正确答案。我最初使用用户输入到我的 StringProcessor str = new StringProcessor(input) 中,效果非常好。我只是不确定如果我的新对象中没有输入并使用 set string 创建我的字符串,为什么我无法让它工作。任何帮助都会很棒。谢谢。

import java.util.*;
public class StringProcessor {
private String noSpaces, string;
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()
{
    string = ("");
}

public StringProcessor(String s)
{
    StringTokenizer one = new StringTokenizer(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]", "-");

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

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

public String getString()
{
    return string;
}

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)静态无效主(字符串[]参数) {

    StringProcessor str = new StringProcessor();
    str.setString("my string");
    System.out.println(str.getString());

    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());
}

}

最佳答案

问题在于,当您使用字符串参数构造 StringProcessor 时,所有计算都会完成:

StringProcessor str = new StringProcessor("some string");

但是你没有使用那个构造函数;您只使用不带参数的构造函数。因此,完成所有计算的代码永远不会被执行。

将计算移至私有(private)方法。然后让单参数构造函数和 setString 调用该方法。 (并确保 setString 或您的私有(private)方法将所有计数重新初始化为 0,这样,如果您多次设置 setString,这些值将是正确的而不是累积的。)

关于java - java文本处理器赋值setString方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23072265/

相关文章:

java - java中lucene-core 3.4.0支持哪些文件

java - java中如何重定向用户从URL访问页面?

java - Selenium sendKeys() 对于 Chrome、Firefox 和 Safari 的不同行为

java - 使用 JPA/Hibernate 保留大型对象图时出现异常

java - 如何在 gradle 启动测试中关闭关闭 Hook 的输出?

java - 从排序列表中删除重复项

java - java数组中的轨道数字

java - Spring Cloud Config-属性解密在客户端不起作用

java - 如何在 Android Studio 中设置 Gradle Wrapper

java - 如何将对象列表下载为 Excel 文件?