2014-06-19 5 views
0

여러 문자열을 하나로 저장하려고합니다. 그게, 얼마나 많은 문자열이 될지 모르겠다. 텍스트 파일에서 칼로리를 읽고 해당 배열에 저장하는 프로그램을 만들고 있습니다. 여러 문자열을 하나의 문자열로 저장

Description of food       Fat Food Energy Carbohydrate Protein  Cholesterol Weight Saturated Fat 
              (Grams) (calories) (Grams) (Grams)  (Milligrams) (Grams) (Grams) 


APPLES, RAW, PEELED, SLICED 1 CUP   0  65   16   0  0  110  0.1 
APPLES, RAW, UNPEELED,2 PER LB1 APPLE  1  125   32   0  0  212  0.1 
APPLES, RAW, UNPEELED,3 PER LB1 APPLE  0  80   21   0  0  138  0.1 
APRICOT NECTAR, NO ADDED VIT C1 CUP   0  140   36   1  0  251  0 

지금 음식 이름, 내가 배열 foodName 있습니다

다음은 텍스트의 부분입니다. 내가 금액 인 int에 도달 할 때까지 전체 문자열을 읽습니다. 여기

내가 지금까지 한 일이다 : 루프의 가장 안쪽에

Scanner input = new Scanner("Calories.txt"); 
while (input.hasNext()) { 
    String[] words = input.next().split(" "); 
    int lastI; 
    for (int i=0; i < words.length; i++) { 
     if (isNumeric(words[i])) { 
      lastI = i; 
      for(int j=lastI; j>=0; j++){ 
       //What should I put here? 
      } 
     } 
    } 
} 

public static boolean isNumeric(String str) { 
    try { 
     double d = Double.parseDouble(str); 
    } catch (NumberFormatException nfe) { 
     return false; 
    } 
    return true; 
} 

, 그래서 나는 그것에서 시작할 수 뒤로 이동 마지막 인덱스의 트랙을 유지했다.

문제 1 : 두 번째 줄에서 뒤로 이동하면 두 줄을 모두 복사합니다.

문제 2 : foodName의 한 색인에 이름의 모든 문자열을 저장하는 방법?

모든 도움은 감사합니다 :) StringBuilder라고

+0

봐 (각 행은 별도의 문자열 있습니다 당신은 파일 출력을 엉망으로 서식하는 방법을 볼 수 있습니다.). 그것은 당신이 원하는 것일 수 있습니다. – jhobbie

+0

파일의 형식을 변경할 수 있습니까? 플랫 파일을 사용하는 경우 CSV (쉼표로 구분 된 값) 파일과 같은 표준 형식을 사용하는 것이 좋습니다. 이렇게하면 각 쉼표로 구분할 수 있습니다. 그런 다음 숫자를 찾을 때까지 배열의 각 값을 반복하고 다음 행으로 이동하십시오. –

+0

for (int j = lastI; j> = 0; j ++)'이것은 정말 좋은 생각입니다. 또한 질문이 불분명 한 것 같습니다. 정확히 하나의 String으로 무엇을 원하나요?문자열 배열 또는 단일 문자열을 의미합니까? 이 파일 예제는 형식화 방법과 정확히 일치합니까? –

답변

3

자바에서 찾는거야. 기본적으로 문자열처럼 사용하고 계속 추가 할 수 있습니다.

File file = new File("output.txt"); 
Scanner input = new Scanner(file); 
StringBuilder sb = new StringBuilder(); 
while (input.hasNextLine()) { 
    String[] words = input.nextLine().split(" "); 
    for (int i = 0; i < words.length; i++) { 
     if (isNumeric(words[i])) { 
      break; 
     } 
     sb.append(words[i] + " "); 
    } 
    System.out.println(sb); 
    sb = new StringBuilder(); 
} 
input.close(); 

이렇게하면 파일을 한 줄씩 읽으며 ""에 줄을 나눈 문자열 배열을 만듭니다. 그런 다음 배열의 각 문자열을 반복하여 숫자인지 확인하고, 숫자 인 경우 현재 루프를 중단하고 다음 줄로 이동합니다.

각 줄 다음에 StringBuilder이 인쇄 된 다음 다시 설정하면 원하는 기능으로 바꿔야합니다. 당신도

커플 제안 :

  1. 은 CSV 파일을 사용합니다. 공백 대신 쉼표로 모든 것을 구분하면 파싱이 매우 쉽습니다.
  2. regex를 사용하여 문자열이 예외를 포착하는 대신 숫자인지 여부를 확인하십시오. 더 우아합니다.

출력 형식은 파일 형식 때문에 약간 재미 있습니다. ""에서 파싱을하고 있지만 파일에 추가 ""문자를 추가하여 형식을 멋지게 보입니다. 이것은 파싱을 매우 나쁘게 엉망으로 만듭니다. 그러나이 메서드는 플랫 파일의 형식을 수정할 때 올바르게 구문 분석합니다. 이에서

출력했다 :은`StringBuilder` 클래스에서

Description of food       Fat Food Energy Carbohydrate Protein  Cholesterol Weight Saturated Fat 
             (Grams) (calories) (Grams) (Grams)  (Milligrams) (Grams) (Grams) 


APPLES, RAW, PEELED, SLICED 
APPLES, RAW, UNPEELED,2 PER LB1 APPLE   
APPLES, RAW, UNPEELED,3 PER LB1 APPLE   
APRICOT NECTAR, NO ADDED VIT C1 CUP  
+0

많이 감사합니다. < –

+0

언제든지 도와 드릴 수있어서 기쁩니다! –

관련 문제