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

文本处理器赋值集合字符串方法java

唐修能
2023-03-14

我很难弄清楚为什么我的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;
}

公共静态无效主(String[]args){

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

}

共有1个答案

微生啸
2023-03-14

问题是,所有计算都是在使用字符串参数构造StringProcessor时完成的:

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

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

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

 类似资料:
  • Boost.Regex 正则表达式是解决大量模式匹配问题的基础。它们常用于处理大的字符串,子串模糊查找,按某种格式tokenize字符串,或者是基于某种规则修改字符串。由于C++没有提供正则表达式支持,使得有些用户被迫转向其它支持正则表达式的语言,如Perl, awk, 和 sed。Regex提供了高效和强大的正则表达式支持,基于与STL同样的前提而设计,这使得它很容易使用。Regex已被即将发布

  • 我只需要从方法中检索,然后以字符串形式返回该值。

  • 我想在警报对话框中显示字符串/字符串中的文本。xml,并根据应用程序内的结果,添加一个附加文本。 一串xml 我的警报对话框 我的getText()方法 输出: 你好,世界 21283932323 我是从文本的方法 我也是那里发来的短信 __ 这里怎么了?为什么我得到的是一个数字而不是字符串中的文本。xml?

  • 问题内容: 我在与装饰器一起使用docstrings时遇到问题。给出以下示例: 现在,该帮助未像预期那样向我显示文档字符串,而是显示: 没有装饰器,帮助是正确的: 我知道,该函数由装饰器包装,因此该函数对象不再是该函数。但是,按预期方式获得文档字符串(和帮助)的最佳解决方案是什么? 问题答案: 使用更新装饰的属性: 另请参阅标准库文件的。

  • StringBuffer 是一个字符串拼接工具,和java中的StringBuilder类似。对于那些需要大量的字符串连接的时候,用 StringBuffer 更高效一些。它实现了以下API: class StringBuffer { public function __construct($str); public function isEmpty(); publi