2017-05-10 50 views
0

我有一個方法可以打印給定字符串中給定字符的索引。如果String不包含給定字符,則結果爲-1。 我的代碼如下所示:在字符串中打印字符的位置

public static int strpos(String text, char z) { 

    int x = 0; 

    char[] array = text.toCharArray(); 
    for (int i = 0; i < array.length; i++) { 
     if (array[i] == z) { 
      x = i; 
      break; 
     } else { 
      x = -1; 
     } 
    } 
    return x; 
} 

public static void main(String[] args) { 
    System.out.println(strpos("abcdefghc", 'c')); 
} 

在這種情況下,結果是,如果我刪除突破,結果是。我怎樣才能讓我的代碼得到2和8的結果?

+0

您是否嘗試過用'String.indexOf(焦炭)'方法? –

回答

0

您無法獲得單一回報的結果。
但是,您可以返回ArrayList<Integer>
您需要:

  • 在函數頭部初始化列表。
  • 每次找到一個號碼,而不是打破,add就是你的名單。
  • 當您完成搜索時,返回列表。

這就是您可以輕鬆返回多個值的方法。

另外,爲什麼其他呢?

+0

如果給定的字符不在字符串中,則打印-1。 –

+0

@PiotrWanjas用'c'和字符串「abcdefgch」測試方法,不帶'break'。你應該得到一個7,但你會得到一個-1因爲'else'。-1肯定會出現,但不會在那裏。 – Neo

+0

在下面發佈我的當前代碼。 –

0

一個解決辦法是給指數存儲在List<Integer>,改變方法,返回它:

public static List<Integer> strpos(String text, char z) { 
    List<Integer> indices = new ArrayList<>(); 

    char[] array = text.toCharArray(); 

    for (int i = 0; i < array.length; i++) { 
     if (array[i] != z) { 
      continue; 
     } 

     list.add(i); 
    } 

    return indices.isEmpty() ? Arrays.asList(-1) : indices; 
} 
+1

只要將它添加到列表中,是否更容易? – Neo

+0

@Neo我很困惑,因爲這就是我正在做的。 –

+1

邏輯上是,但是如果char與'z'不同,則通過'continue'實現它。只是檢查它是否等於'z'並添加它,如果是的話,是不是更容易?不需要「繼續」,更少的線條和更多的可讀性。 – Neo

0

您可以返回類型更改爲List<Integer>,並收集所有匹配的索引列表中(或其他您選擇的集合)。 在這種情況下,不要使用-1作爲特殊值來指示字符串中不存在字符,而是返回空列表,而不是自然地返回空列表 。

這裏有一種方法來實現的是:

List<Integer> strpos(String text, char z) { 
    return IntStream.range(0, text.length()) 
      .filter(i -> text.charAt(i) == z) 
      .boxed() 
      .collect(Collectors.toList()); 
} 

另外,不帶Java 8流,但是從.indexOf受益:

List<Integer> strpos(String text, char z) { 
    List<Integer> indexes = new ArrayList<>(); 
    int index = -1; 
    while (true) { 
     index = text.indexOf(z, index + 1); 
     if (index == -1) { 
      break; 
     } 
     indexes.add(index); 
    } 
    return indexes; 
}