2016-03-15 192 views
0

比方說,我有一個字符串,其中包含「LANNISTERS」,,我想要一個新字符串只保留「AR」字符,這是第二個字母,倒數第二個字母,我該怎麼做?因爲子字符串將抓住之間的一切,我不能字符,因爲字符與字符串不兼容,謝謝!如何在Java中使用字符串執行此操作?

我有這樣的:

String in = "LANNISTERS"; 
int getter1 = in.charAt(1); 
int getter2 = in.charAt(in.length() - 1); 
String s = in.substring(getter1, getter1 + 1) + in.substring(getter2, getter2 + 1); 
+2

純粹的代碼寫入請求在堆棧溢出上偏離主題 - 我們期望 這裏的問題與*特定的*編程問題有關 - 但我們 會很高興地幫助您自己編寫它!告訴我們 [你試過的東西](http://stackoverflow.com/help/how-to-ask),以及你卡在哪裏。 這也將幫助我們更好地回答你的問題。 –

+0

'char'與'String'不兼容,但你總是可以使用['Character.toString(char)'](https://docs.oracle.com/javase/7)將'char'轉換爲'String' /docs/api/java/lang/Character.html#toString(char))(或'「」+ ch')。 –

+4

如何處理少於4個字符的字符串的邊緣情況? –

回答

1

一種可行的方法是使用StringBuilder,並且或者String.charAt(int)(或String.toCharArray()轉換的Stringchar[])。喜歡的東西,

String in = "LANNISTERS"; 
char[] chars = in.toCharArray(); 
StringBuilder sb = new StringBuilder(2); 
sb.append(chars[1]).append(chars[chars.length - 2]); 
System.out.println(sb.toString()); 

從下面@Andreas評論,作爲一個襯墊像

System.out.println(new String(new char[] { in.charAt(1) 
     , in.charAt(in.length() - 2) })); 

同樣的事情用StringBuilder

System.out.println(new StringBuilder().append(in.charAt(1)) 
     .append(in.charAt(in.length() - 2))); 

你喜歡哪個。

+0

'toCharArray()'調用有什麼特別的優勢,而不是僅僅使用'in.charAt(1)'和'in.charAt(in.length() - 2)'? –

+0

@AndyTurner我(個人)認爲它使代碼更易於閱讀,但這是主觀的。當然,可讀性是一個特別的優勢。 –

+2

簡單單線程怎麼樣? 'new String(new char [] {in.charAt(1),in.charAt(in.length() - 2)})'。不需要將字符串複製到數組中或開銷「StringBuilder」的開銷。 ---我同意@AndyTurner的說法,charAt()似乎是這個問題的更好選擇,但這只是我的看法。 ;-) – Andreas

0

我將使用正則表達式:

String s = in.replaceAll("(?:.(.).*(.).)?", "$1$2"); 

正則表達式捕捉2 第二和2 第二 -last字符作爲組1個ANS 2分別同時整個輸入匹配。然後,替換將組1和組2放回。

如果輸入太短以至於沒有(單獨的)匹配組,則結果字符串爲空,這要歸功於整個表達式是可選的,它將始終匹配。