2014-11-21 2 views
0

문자열에서 고유 한 문자 값을 반환해야합니다. String.indexOf()을 사용하고 있지만 올바르게 작동하지 않습니다. 카메라Java 문자열에서 char의 고유 색인을 반환하는 방법?

인덱스 : 예

C-0, A-1, m-2, E-3, R-4, A-5

String.indexOf() 항상 문자에 대한 인덱스 1을 반환 "a"가 아니라 1과 5가 필요합니다.

어떻게 해결할 수 있습니까?

+2

indexOf 메서드에는 시작 인덱스를 허용하는 오버로드가 있으므로 전체 목록을 찾을 때까지 해당 문자의 마지막 모양의 인덱스에서 시작하는 인덱스를 재귀 적으로 호출 할 수 있습니다. https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int,%20int) –

+0

또한 http://stackoverflow.com/questions/767759/occurrences- substring-in-a-string – zlinks

답변

0
public static void main(String[] args) { 
    List<Integer> indexes = getIndexInString("camera", "a"); 
    System.out.println(indexes); 

} 

public static List<Integer> getIndexInString(String str, String charToFind) { 
    List<Integer> indexes = new ArrayList<Integer>(); 

    int i = -1; 

    while (true) { 
     i = str.indexOf(charToFind, i + 1); 
     if (i == -1) 
      break; 
     else 
      indexes.add(i); 
    } 


    return indexes; 
} 
+0

배열을 'charToFind'로 사용할 수 있습니까? 모든 모음을 찾으려면 – user1950221

+0

빠른 해결책을 위해 배열의 각 요소에 대한 메서드를 호출해야합니다. 그렇지 않으면 하나의 배열에 필요하기 때문에 각 요소에 대해 – orak

+0

메서드를 호출하는 것이 좋지 않습니다. – user1950221

0

여기 있습니다.

public static void main(String[] args) { 
    String text = "camera"; 
    String[] indexes = getIndexesOf(text); 
    for(String i : indexes) { 
     System.out.println(i); 
    } 
    System.out.println(); 
    int[] result = indexOfChar(text, "a"); 
    for(int i : result) { 
     System.out.print(i +","); 
    } 

} 

public static String[] getIndexesOf(String text) { 
    String[] indexes = new String[text.length()]; 
    for(int i=0; i<text.length(); i++) { 
     indexes[i] = text.charAt(i) + "-" + i; 
    } 
    return indexes; 
} 

public static int[] indexOfChar(String text, String c) { 
    List<Integer> indexOfChars = new ArrayList<Integer>(); 
    for(int i=0; i<text.length(); i++) { 
     if(String.valueOf(text.charAt(i)).equals(c)) { 
      indexOfChars.add(i); 
     } 
    } 
    int [] retIndexes = new int[indexOfChars.size()]; 
    for(int i=0; i<retIndexes.length; i++) { 
     retIndexes[i] = indexOfChars.get(i).intValue(); 
    } 
    return retIndexes; 
}