从textview中进行字符串标记

时间:2014-01-07 09:21:56

标签: 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 = ((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);

但我在textview中说了最后一句话。 令牌化前的文字:

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

文本:

        confusing

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

3 个答案:

答案 0 :(得分:4)

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

result = st3;

所以它总是等于最后一个值。将结果类型从String更改为StringBuilder,然后随时构建

 result.append(st3 + " "); //re-adding the space as the StringTokenizer will remove it

然后在StringTokenizer循环后,使用String

获取构建的result.toString()

为什么不result += st3

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

<强>的StringTokenizer

值得注意的是 - @RGraham在评论中说 - 这个课程已被弃用。这意味着它不再常用,不鼓励使用它,并且可以在某些时候删除它 More information here

代币 - 进出

由于其他答案与我截然相反,经过对所述答案之一和meta的讨论后,我觉得我需要澄清一下。一世 我不确定你的意图是要摆脱令牌(在这种情况下是空格“”)并最终得到

Examplesofparadoxescanbehumorousandconfusing

或在输出最终String时更换它们并取出你放入的内容。所以我假设你想保留原来的意思并替换它们。否则,获得上述结果的更快捷方法是简单地跳过所有标记化并执行

test.replaceAll(" ","");

答案 1 :(得分:0)

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

                    result = st3;  // Everytime you are reassigning result to some other String
            }

答案 2 :(得分:0)

替换 result = st3; by(initialize String result=" ";result+=st3+" "

然后更换 i.putExtra("result", result);i.putExtra("result", result.trim());

。{

试试这个,它会显示出完美的结果。

您也可以result.append(st3+" ");然后i.putExtra("result", result.trim());

执行此操作