2014-01-07 90 views
0

標記化而我的TextView與動態變化的文本。 我想這個標記化文本與空間分隔符「」發送至另一個TextView的字符串從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

這不是* *不對任何地方,它做什麼你告訴它做的事。你期望'result'變量包含什麼?目前它只包含最後一個詞。 – CodingIntrigue

+0

您的'結果'每次都會在循環中更新。最後會有最後的結論。如果你想對每個詞做些什麼,在循環中這樣做 – rajesh

回答

4

你每次讀一個新的令牌

result = st3; 

所以它總是等於最後一個值時覆蓋的結果。變更結果從String類型StringBuilder,只是把它做成你去

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

然後StringTokenizer循環後只用result.toString()


爲什麼不result += st3獲得內置String

一些其他答案建議你這樣做。不這樣做的原因是在Java中,String是不可變的。這意味着它們不能被更改,因此無論何時添加兩個String對象,都會創建一個新的String對象。 所以通過你正在創建一個新的String對象,它是低效和不必要的循環的每一步。 StringBuilder並不是一成不變的和String s時,可以附加到它,而無需創建新的對象,每次的開銷。

的StringTokenizer

值得注意-as @RGraham在個評論說,此類已廢棄。這意味着它不再是常用的,它的使用是不鼓勵的,它可以在某些時候被刪除。
More information here

令牌 - 或縮小

至於其他的答案承擔我的對面,討論後的人說的答案和meta,我覺得我有必要澄清這一點。我 不敢肯定,如果你的目的是要擺脫令牌(在這種情況下空格「「),並最終與

Examplesofparadoxescanbehumorousandconfusing 

或輸出最終String時候更換他們,並得到了你放什麼所以我假設你想保留原來的意思並代替它們。否則,更快的方式來獲得上述結果是簡單地跳過所有的符號化,做

test.replaceAll(" ",""); 
+1

也值得注意的是,StringTokenizer是一個遺留的類,由於兼容性的原因而被保留,並且它在新代碼中的使用不受阻礙 – CodingIntrigue

+0

您能否顯示編碼? 我是java中的初學者 – abooo

+0

用'StringBuilder result = new StringBuilder();'替換'String result = null;'並用我在文章中建議的代碼替換'result = st3'。最後,用'i.putExtra(「result」,result.toString())替換'i.putExtra(「result」,result);' –

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

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

由(初始化String result=" ";)更換 result = st3; result+=st3+" "

,然後用i.putExtra("result", result.trim());

更換 i.putExtra("result", result);

試試這個,它會顯示完美的結果。

你也可以做到這一點result.append(st3+" ");然後i.putExtra("result", result.trim());

+0

這將返回「Examplesofparadoxescanbehumorousandconfusing」並且將需要創建8個單獨的'String'對象 –

+1

確定它會緩解以這種方式添加空間結果+ = st3 +「 「。它將被解決 –

+0

我編輯了我的答案。看一看 –