Java 标记化和计数标记

Java 标记化和计数标记,java,eclipse,count,token,Java,Eclipse,Count,Token,我有一个文本视图,文本是动态变化的。我希望使用分隔符空格“”标记此文本,并在下次发送到另一个textview时计数标记 这是我的密码 public void onClick(View v) { // TODO Auto-generated method stub if (v.getId()==R.id.button5){ Intent i = new Intent(this, Tokenizing.class); String test = ((

我有一个文本视图,文本是动态变化的。我希望使用分隔符空格“”标记此文本,并在下次发送到另一个textview时计数标记

这是我的密码

public void onClick(View v) {
    // TODO Auto-generated method stub
    if (v.getId()==R.id.button5){
        Intent i = new Intent(this, Tokenizing.class);

        String test = ((TextView)findViewById(R.id.textView6)).getText().toString();
        test = test.toLowerCase();
        test = test.replaceAll("\\W", " ");
        StringBuilder result = new StringBuilder();
        StringTokenizer st2 = new StringTokenizer(test);
            while (st2.hasMoreTokens()) {
                String st3 = st2.nextToken();
                System.out.println(st3 + st2.countTokens());
            //  System.out.println("Count Token" + st2.countTokens());
                result.append(st3+'\n');
        }

        i.putExtra("result", result.toString());
        startActivity(i);
        //Log.i("Test Klik Next", result);
    }
结果

       stopwords 
       are 
       commonly 
       occurring 
       words
标记化过程进行得很顺利,但我没有得到结果计数标记,我的编码有什么问题吗

我想要这样的预期输出

       (number of tokens)
        stopwords 
        are 
        commonly 
        occurring 
        words

StringTokenizer
有一个方法
countTokens()
-->计算在生成异常之前可以调用此标记器的nextToken方法的次数

因此,对于所需的输出,必须在循环之前调用它:

public void onClick(View v) {
    if (v.getId()==R.id.button5){
        Intent i = new Intent(this, Tokenizing.class);

        String test = ((TextView)findViewById(R.id.textView6)).getText().toString();
        test = test.toLowerCase();
        test = test.replaceAll("\\W", " ");
        StringBuilder result = new StringBuilder();
        StringTokenizer st2 = new StringTokenizer(test);
        int len=st2.countTokens();
        System.out.println(len);
        result.append(len+"\n");
            while (st2.hasMoreTokens()) {
                String st3 = st2.nextToken();
                System.out.println(st3);
                result.append(st3+'\n');
        }

        i.putExtra("result", result.toString());
        startActivity(i);
        //Log.i("Test Klik Next", result);
    }

在循环使用生成的令牌之前,您可能希望在代码中添加一行:

result.append(st2.countTokens() + "\n");
while (st2.hasMoreTokens()) {
您可能希望注释掉while循环中的SOP,以避免混淆

或者,您可以在不迭代使用常规字符串拆分创建的标记的情况下实现这一点:

    String test = "This is a test String proving the concept";
    StringBuilder result = new StringBuilder();

    String[] tokens = test.split("\\s");
    result.append(tokens.length + "\n");

    for (String str:tokens) {
             result.append(str+'\n');
            }
     System.out.println(result);
输出:

8
This
is
a
test
String
proving
the
concept

您能否给出示例输入和预期输出以及您的实际输出(或者您的预期输出是什么)?另外,去掉UI元素并将其输出到标准输出(以及标准输入的输入)-这会导致代码更简单,更多地关注手头的问题,这更适合于