2016-09-25 48 views
1

我是新來編程和工作的Java字符串分配。這個問題說:如何在Java中打印字符串的中間三個字符?

  1. 聲明String類型的命名中36的變量(把近程序的頂部的其他聲明的聲明),並使用賦值語句和thesubstring方法來分配子由中間middle3短語的三個字符(中間索引處的字符連同左側的字符以及右側的字符)。添加一個println語句來打印結果。保存,編譯並運行,以測試迄今爲止所做的工作。

這裏是我做了什麼:

String phrase = new String ("This is a String test."); 
String middle3 = new String ("tri"); //I want to print the middle 3 characters in "phrase" which I think is "tri". 

middle3 = phrase.substring (9, 11); // this only prints out 1 letter instead of 3 


System.out.println ("middle3: " + middle3); 

這裏是我的輸出:

Original phrase: This is a String test. 
Length of the phrase: 18 characters 
middle3: S 

我也認爲有字符串「短語」 18個字符,但如果有不是,請讓我知道。預先感謝您的幫助!

+2

不要硬代碼的中間指標。想想你將如何計算任何字符串。嘗試找到一箇中間索引,然後中間索引+ -1是你的中間字符串,除非長度小於三。還要考慮如果字符串的長度是奇數還是偶數,你會怎麼做。 –

回答

3

首先,phrase中有22個字符。

"This is a String test." 
^^^^^^^^^^^^^^^^^^^^^^ --> 22 

請注意,空格()會計入字符數。此外,String有一個方法length()它會給你這個號碼。

String phrase = "This is a String test."; 
int phraseLength = phrase.length(); //22 

從那裏,我們可以通過取值phraseLength/2得到中間的三個字符。中間的三個字符將在中間位置之前開始,之後停止。但是,因爲string(int, int) method以末尾索引爲exclusive,我們應該增加一個。

String phrase = "This is a String test."; 
int phraseLength = phrase.length(); //22 
String middle3 = phrase.substring(phraseLength/2 - 1, phraseLength/2 + 2); // will have the middle 3 chars. 

如果phrase的長度是奇數,則會返回中間3個字符。如果phrase的長度是偶數(因爲它在這裏),這將返回左中間的3個字符。 (例如,在1,2,3,4中,我使用left-middle代表2,右中代表3)。

另外需要注意的是,編寫new String("asdf")既是不必要的也是不好的做法。只需使用字符串文字。

String phrase = new String ("This is a String test."); //Bad 
String phrase = "This is a String test."; //Good 
5

想想如何檢索中間3個字符而不硬編碼方法的邊界。您可以在這方面使用length()方法。例如,一個奇數長度的字符串的中間字符總是在索引str.length()/2處,而偶數長度字符串的兩個中間字符總是在索引str.length()/2(str.length()/2) - 1處。所以三個中間字符的定義將取決於你。但爲了我們的好處,我們只需製作索引(str.length()/2)-1str.length()/2(str.length()/2)+1中的3箇中間字符。有了這些信息,你可以修改此行的你有過代碼,

middle3 = phrase.substring (9, 11); 

middle3 = phrase.substring (phrase.length()/2 - 1, phrase.length()/2 + 2); 

至於爲什麼代碼原線你以前是隻返回一個字母,它必須做使用substring方法的參數。第一個參數是包含性的,但第二個參數不是。因此,您只能檢索9至10個字符。

This is a String test. 
     ^^^ 
     9,10,11 (11 is not included) 

我指出的三個字符分別位於索引9,10和11。你只檢索字符''和'S',它們一起只是「S」。這解釋了之前的單字母輸出。

+0

感謝您回答如何編碼3個字母而不是1個字符以及如何確定字符串長度的詳細響應。我還沒有學到長度方法,這可能有幫助。這個問題確實說使用賦值語句和子字符串方法來找到3箇中間字符。 –

+0

@Paraknight不客氣!你有什麼理由不接受答案嗎?如果有什麼我可以批准的,我很樂意幫忙。 –

+0

顯然我只能接受一個答案,並且我對長度方法的工作方式感到困惑,但Mshnik的帖子幫助我理解了它。如果可以的話,我也會接受你的回答。由於我沒有學習Length方法,我不確定它是不同的還是部分子字符串方法。 –

2

你在begind索引錯誤,並在字符串中結束索引,這是正確的代碼:

String phrase = new String("This is a String test."); 
String middle3 = phrase.substring(11, 14); 
System.out.println("middle3: " + middle3); 
+0

這與問題的評論中指出的問題相同:硬編碼索引。 – Robert

相關問題