我的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
我的编码部分在哪里错了?
答案 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());