Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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
Java 从textview进行字符串标记化_Java_Android_Eclipse - Fatal编程技术网

Java 从textview进行字符串标记化

Java 从textview进行字符串标记化,java,android,eclipse,Java,Android,Eclipse,我有一个文本视图,文本是动态变化的。 我想用分隔符空格“”标记此文本并发送到另一个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 = ((TextVie

我有一个文本视图,文本是动态变化的。 我想用分隔符空格“”标记此文本并发送到另一个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();
        String result = null;
        StringTokenizer st2 = new StringTokenizer(test," ");
            while (st2.hasMoreTokens()) {
                String st3 = st2.nextToken();
                System.out.println(st3);

                result = st3;
        }
        i.putExtra("result", result);
        startActivity(i);
        Log.i("Test Klik Next", result);
但我在文本视图中只有最后一句话。 标记化前的文本:

        Examples of paradoxes can be humorous and confusing
        confusing
标记化后的文本:

        Examples of paradoxes can be humorous and confusing
        confusing

我的编码错误的部分在哪里?

每次读取新令牌时都会覆盖结果

  while (st2.hasMoreTokens()) {
                    String st3 = st2.nextToken();
                    System.out.println(st3);

                    result = st3;  // Everytime you are reassigning result to some other String
            }
result = st3;
所以它总是等于最后一个值。将结果类型从
String
更改为,并在运行时构建它

 result.append(st3 + " "); //re-adding the space as the StringTokenizer will remove it
然后在
StringTokenizer
循环之后,只需使用
result.toString()


为什么不
结果+=st3

其他一些答案建议你这样做。不这样做的原因是,在Java中,
String
是不可变的。这意味着它们不能更改,因此,每当您附加两个
String
对象时,都会创建一个新的
String
对象。 因此,通过循环的每一步,您都在创建一个新的
String
对象,这是低效且不必要的
StringBuilder
不是不可变的,可以将
String
s附加到它,而无需每次创建新对象的开销

StringTokenizer

值得注意的是,@RGraham在评论中说,这个类已经被弃用了。这意味着它不再常用,不鼓励使用,并且可能在某个时候被删除。

代币-输入或输出

由于其他答案与我截然相反,在讨论了上述答案之一之后,我觉得我需要澄清这一点。我 “我不确定您的目的是不是要去掉代币(在本例中为空格“”)并最终得到

Examplesofparadoxescanbehumorousandconfusing
或者在输出最后的
字符串时替换它们,并取出您输入的内容。所以我假设你想保留原来的意思并替换它们。否则,获得上述结果的一个更快的方法就是跳过所有标记化并执行以下操作

test.replaceAll(" ","");

每次读取新令牌时,都会覆盖结果

result = st3;
所以它总是等于最后一个值。将结果类型从
String
更改为,并在运行时构建它

 result.append(st3 + " "); //re-adding the space as the StringTokenizer will remove it
然后在
StringTokenizer
循环之后,只需使用
result.toString()


为什么不
结果+=st3

其他一些答案建议你这样做。不这样做的原因是,在Java中,
String
是不可变的。这意味着它们不能更改,因此,每当您附加两个
String
对象时,都会创建一个新的
String
对象。 因此,通过循环的每一步,您都在创建一个新的
String
对象,这是低效且不必要的
StringBuilder
不是不可变的,可以将
String
s附加到它,而无需每次创建新对象的开销

StringTokenizer

值得注意的是,@RGraham在评论中说,这个类已经被弃用了。这意味着它不再常用,不鼓励使用,并且可能在某个时候被删除。

代币-输入或输出

由于其他答案与我截然相反,在讨论了上述答案之一之后,我觉得我需要澄清这一点。我 “我不确定您的目的是不是要去掉代币(在本例中为空格“”)并最终得到

Examplesofparadoxescanbehumorousandconfusing
或者在输出最后的
字符串时替换它们,并取出您输入的内容。所以我假设你想保留原来的意思并替换它们。否则,获得上述结果的一个更快的方法就是跳过所有标记化并执行以下操作

test.replaceAll(" ","");
替换
result=st3由(初始化
字符串结果=”;
result+=st3+“”

然后更换
i.putExtra(“结果”,结果)i.putExtra(“result”,result.trim())的code>

试试这个,它会显示完美的效果

您也可以这样做
result.append(st3+)i.putExtra(“result”,result.trim())

更换
result=st3由(初始化
字符串结果=”;
result+=st3+“”

然后更换
i.putExtra(“结果”,结果)i.putExtra(“result”,result.trim())的code>

试试这个,它会显示完美的效果


您也可以这样做
result.append(st3+)i.putExtra(“result”,result.trim())

它在任何地方都没有错,它在做你让它做的事情。您希望
结果
变量包含什么?目前它只包含最后一个单词。您的
结果每次都会在循环中更新。并将在最后说最后一句话。如果你想对每一个单词都做些什么,那么就在循环中做吧。它在任何地方都没有错,它在做你让它做的事情。您希望
结果
变量包含什么?目前它只包含最后一个单词。您的
结果每次都会在循环中更新。并将在最后说最后一句话。如果您想对每个单词执行某些操作,那么在循环中执行也可能值得注意,StringTokenizer是一个遗留类,出于兼容性原因而保留,在new codereplace
String result=null中不鼓励使用它带有
StringBuilder结果=新的StringBuilder()
并用我在帖子中建议的代码替换
result=st3
。最后,替换
i.putExtra(“结果”,result)带有
i.putExtra(“result”,result.toString())是的工作兄弟我尝试你的代码并添加结果。追加(st3+'\n');像这样的悖论例子的结果可能是幽默和混乱的,谢谢兄弟,下一步我想去掉标点符号,把文本改成小写。你能帮我个忙吗