2017-12-13 2 views
-1

한 문자열 배열의 단어가 다른 문자열 배열에 있는지 확인하는 방법을 알아내는 데 어려움이 있습니다. .contains은() 문자열 배열에 적용 할 수 없기 때문에 위의 코드는 현재 나에게 오류를주고있다문자열 배열에 다른 문자열 배열의 단어가 포함되어 있는지 확인하십시오.

 FileInputStream fis = new FileInputStream("TranHistory.csv"); 
     InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); 
     CSVReader reader = new CSVReader(isr); 

     String[] groceries = new String[]{"albertsons", "costco"}; 

     for (String[] cols; (cols = reader.readNext()) != null;) { 
      if(cols[4].toLowerCase().contains(groceries)){ 
       System.out.print(cols[4]); 
      } 

     } 

: 이것은 내가 지금까지있는 것입니다.

 if(cols[4].toLowerCase().contains("albertsons")){ 
       System.out.print(cols[4]); 
     } 

내 문제는 문자열 [] 식료품 그래서 난 문자열 [] 식료품에 가장을 문자열 [] COL입니다 비교 생각 많은 식료품 점을 가지고 가고 있다는 것입니다 : 나는이에 if 문을 변경 한 경우에만 작동합니다 이 일을하는 효율적인 방법 나는 그것을 구현하는 데 어려움을 겪고있다.

는 해결책 :

나는 ... 당신은 루프 중첩을 할 필요가 그것을 알아 냈다.

String[] groceries = {"albertsons", "costco"}; 

for (String[] cols; (cols = reader.readNext()) != null;) { 
     for (int i = 0; i < groceries.length; i++){ 

      if(cols[4].toLowerCase().contains(groceries[i])) 
      { 
       System.out.print(cols[4]); 
       } 

      } 
     } 

답변

2

나는 당신이 계획이 식료품을 모두 포함하는 Set<String>을 만드는 것이 좋습니다 : 당신 IF 것 같은 Set에서 검색

Set<String> groceries = Set.of("albertsons", "costco"); 

for (String[] cols; (cols = reader.readNext()) != null;) { 
    if (groceries.contains(cols[4].toLowerCase()){ 
     System.out.print(cols[4]); 
    } 
} 

선형 시간이 소요되지 않습니다 이것은 내가 무슨 짓을 배열을 사용했습니다. 이 선형 시간보다는 일정 시간의 요소를 검색으로 내가 HashSet의를 통해이 작업을 수행 일반적 것이다

Set<String> groceries = new HashSet<>(Arrays.asList("albertsons", "costco")); 
+0

Set.of – Stephan

+1

'Set # of '가 Java 9에 도입되었습니다. –

+1

업데이트하지 않으려면 다음과 같이'Set '을 초기화 할 수 있습니다 :'new HashSet <> (Arrays.asList ("albertsons", "costco"));' –

0

:

으로 YCF_L 나는 당신이 자바 8에 Set을 초기화 할 수 있습니다, 아래의 코멘트에 설명 . 따라서이 코드를 사용하여 검색 할 수 있습니다. 파일의 전체 원본 배열을 찾을 때 인쇄 할 것을 원한다고 가정합니다.

FileInputStream fis = new FileInputStream("TranHistory.csv"); 
InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); 
CSVReader reader = new CSVReader(isr); 

String[] groceries = new String[]{"albertsons", "costco"}; 
Set<String> grocerySet = Arrays.stream(groceries).collect(Collectors.toSet()); 
System.out.println(grocerySet); 
for (String[] cols; (cols = reader.readNext()) != null;) { 
    Set<String> smallGrocerySet = Arrays.stream(cols).collect(Collectors.toSet()); 
    if(grocerySet.containsAll(smallGrocerySet)){ 
     System.out.println(Arrays.toString(cols)); 
    } 
} 
관련 문제