Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文本处理器分配setString方法java_Java - Fatal编程技术网

文本处理器分配setString方法java

文本处理器分配setString方法java,java,Java,我很难弄清楚为什么我的setMethod不起作用。当我使用它时,我的主方法不会显示任何正确的答案。我最初在我的StringProcessor str=新的StringProcessor(input)中使用了一个用户输入,它工作得非常好。我只是不知道为什么我不能让它工作,如果我没有在我的新对象的输入,并使用设置字符串创建我的字符串。任何帮助都会很好。谢谢 import java.util.*; public class StringProcessor { private String noSpac

我很难弄清楚为什么我的setMethod不起作用。当我使用它时,我的主方法不会显示任何正确的答案。我最初在我的StringProcessor str=新的StringProcessor(input)中使用了一个用户输入,它工作得非常好。我只是不知道为什么我不能让它工作,如果我没有在我的新对象的输入,并使用设置字符串创建我的字符串。任何帮助都会很好。谢谢

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

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

StringProcessor str = new StringProcessor("some string");
但是你没有使用这个构造器;您只使用不带参数的构造函数。因此,执行所有计算的代码永远不会执行


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

我列出的方法是我应该在分配中使用的方法。我是否应该复制一个方法中的所有工作,然后将其粘贴到另一个方法中?@user3242607我还没有看到分配,但“您应该使用的方法”可能是您的类中需要提供给该类以外的其他类的公共方法。私有方法将只是用于帮助实现公共方法的“助手”方法。我不知道你们的老师怎么会反对,但如果他们反对的话,我想剪切粘贴是可行的。这是一个可怕的编程实践,但是说你不能使用私有方法将是一个可怕的限制。
StringProcessor str = new StringProcessor("some string");