2012-04-06 52 views
-1

我想要做的是創建一個方法,它有一個字符串和一個字符作爲參數,然後該方法接受字符串並搜索給定的字符。如果字符串包含該字符,則返回字符出現位置的整數數組。以下是我迄今爲止:Java:如果某個字符在一個字符串中,那麼該怎麼辦?然後打印出它相對於字符串的位置?

public class Sheet { 
public static void main(String[] args) { 
    String string = "bbnnbb"; 
    String complete = null; 
    //******* 
    for(int i = 0; i < string.length(); i++){ 
     complete = StringSearch(string,'n').toString(); 
    } 
      //******** 
} 

public static int[] StringSearch(String string, char lookfor) { 
    int[]num = new int[string.length()]; 
    for(int i = 0; i < num.length; i++){ 
     if(string.charAt(i)== lookfor){ 
      num[i] = i; 
     } 
    } 
    return num; 
} 

}

的方法工作正常,並返回此:

0 
0 
2 
3 
0 
0 

我所要做的,就是讓那些進1個字符串,以便它看起來像這個「002300」。 有沒有任何可能的方法來做到這一點?我試圖在代碼的星號區域做到這一點,但我沒有成功。

+2

爲什麼downvote?似乎並不是一個糟糕的問題,這個操作似乎對Java來說是新的。 – nikhil 2012-04-06 21:02:11

+0

您的任務的「較難」部分已準備就緒......只是通過int []的迭代器並使用+ =運算符。 – dexametason 2012-04-06 21:02:18

+0

我猜你是Java新手,因爲你違反了命名約定。當命名方法和變量時(除非聲明爲「final」),第一個單詞不是大寫,但後面的單詞是大寫的。例如:'thisIsCorrect()'快樂編碼! :) – fireshadow52 2012-04-06 21:06:27

回答

5

只是做

StringBuffer strBuff = new StringBuffer(); 
for(int i = 0; i<str.length(); i++) 
{ 
    if(str.charAt(i) == reqChar) 
    { 
     strBuff.append(str.charAt(i)); 
    } 
    else 
    { 
     strBuff.append('0'); 
    } 
} 
return str.toString(); 
+3

+1對於StringBuffer – dexametason 2012-04-06 21:02:46

+4

你應該使用'StringBuilder'來代替它,因爲它沒有被同步。 – 2012-04-06 21:04:29

+0

@SteveKuo +1對於StringBuilder – jpm 2012-04-06 21:08:05

1

只需將結果添加到現有的字符串與+=操作

String complete = ""; 
for(...) 
    complete += StringSearch(string,'n').toString(); 
+1

即使在這種情況下,這不是一個大問題(tm),我們應該養成使用StringBuilder.append()而不是原始字符串連接的習慣。 – jpm 2012-04-06 21:02:34

+0

你說得對。但這是一個初學者的問題。我認爲基本的東西會做。 – 2012-04-06 21:03:20

+1

我必須同意jpm。它必須用StringBuffer完成,因爲這是StringBuffers的用例。 – dexametason 2012-04-06 21:04:08

1

StringBuilder更新更好的做法。

public static String StringSearch(String string, char lookfor) { 
    StringBuilder sb = new StringBuilder(); 

    for(int i = 0; i < string.length; i++){ 
     if(string.charAt(i) == lookfor) 
      sb.append(i); 
     else 
      sb.append("0"); 
    } 
    return sb.toString(); 
} 

然後你可以只調用它一次,沒有for循環。不知道爲什麼你要爲字符串中的每個字符調用它。

complete = StringSearch(string,'n'); 
1

我只是使用java的正則表達式庫,這樣它就更加靈活了(例如,如果你想查找的不僅僅是單個字符)。另外它高度優化。

StringBuilder positions = ""; 

Pattern pattern = Pattern.compile(string); 
Matcher matcher = pattern.matcher(lookfor); 
while(matcher.find()){ 
    positions.append(matcher.start()); 
} 

return positions; 
相關問題