2011-01-25 4 views
-3

간단한 작업을 수행하는 데 어려움을 겪고 있습니다.Android에서 Java에서 파싱을 수행하는 간단한 방법이 있습니까?

a = b 

내가 내 프로그램이 파일 출력 "b"를 할 때마다 사용자의 입력을 "A"를 읽고 싶은 :이 전 내용의 텍스트 파일이 있다고 가정 해 봅시다. 파이썬이나 C++에서는 약 7 줄 이하로 이것을 수행 할 수 있습니다.

그러나 Android에서이 작업을 수행하는 간단한 방법을 찾는 데 어려움이 있습니다. 예를 들어, 내가 여기에서 찾은 한 샘플은 6 개의 파일에 거의 900 줄이 있습니다.

파일을 구문 분석하고 누락 된 Android에서 변수를 반환하는 간단한 방법이 있습니까?

+5

Gettysburg 주소는 실제로는 매우 짧습니다. Gettysburg 주소는 ~ 20 행이고 ​​80 개의 char 열과 고정 폭 글꼴입니다. –

+0

또한, 나는 900 LOC를 가진 SO에 대한이 가정 된 대답을 원합니다. 나는 그것을 찾을 수없는 것 같아 ... –

+0

파일에서 물건을 추출하고 (Anon의 답변 참조) HashMap을 사용하는 것처럼 들립니다. – Rooke

답변

4

은 당신이 등록 정보 파일에 사용되는 a = b 형식에 만족, 당신은

Properties properties = new Properties(); 
try { 
    properties.load(new FileInputStream(filename)); 
} catch (IOException e) { 
    // the file is missing or is not in 'a = b' format 
} 

제 1, 가지고 한 변수 key이를 포함하여 목표로하는 방식의 99 %를 얻을 수 문자열 "a"을 입력하면 파일에 a = b이 포함 된 경우 properties.getProperty (key)의 결과는 "b"과 같습니다. 파일에서 맵을로드하고 모든 이스케이프 및 문자 인코딩 문제를 처리하기 위해 C++에서 그 이상을 필요로한다고 확신합니다. 속성이 텍스트 파일에서 개최하는 경우

사용자의 파일 시스템에 비해 안드로이드 프로젝트의 폴더 오히려 mappings.properties에게 자산라고, 당신은 이런 식으로 얻을 :

final AssetManager am = getResources().getAssets(); 
    final Properties properties = new Properties(); 

    try { 
     properties.load(am.open("mappings.properties")); 
    } catch (IOException e) { 
     // the file is missing or is not in 'a = b' format 
    } 

편집 상자에 'a'가 입력 된 경우이 다음 비트는 android tutorial에서 빌려서 'b'가 표시된 축배 메시지를 표시합니다. 어쩌면 여기서 XML 파일로 GUI를 설정하고 Java에서 리스너를 추가하는 것이 다른 언어와 비교하여 상당히 길어서 라인 카운트를 얻을 수있는 곳이 여기에 있습니다. 이는 가상 머신이 아니라 Java 및 XML 구문 때문입니다.

final EditText edittext = (EditText) findViewById(R.id.edittext); 

    edittext.setOnKeyListener(new OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      // If the event is a key-down event on the "enter" button 
      if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
       (keyCode == KeyEvent.KEYCODE_ENTER)) { 
       // Perform action on key press 
       Toast.makeText(YourOuterViewClass.this, 
        properties.getProperty(edittext.getText().toString()), 
        Toast.LENGTH_SHORT).show(); 
       return true; 
      } 
      return false; 
     } 
    }); 
2

이렇게하려면 수백 줄의 코드가 필요하지 않습니다. 그것은 몇 줄에서 이루어질 수 있습니다. 나는 당신이 무엇을보고 있었는지 모르지만, 당신이 묘사하고있는 것보다 더 많은 일을하고있을 것입니다.

12
BufferedReader r = new BufferedReader(new FileReader(filename)); 
string s; 
while(s = r.readLine()) { 
    //Oh hey, I got a line out of the file. 
    //In three lines of code. 
    //So what's all this Android-bashing about? 
} 
+0

그가 원하는 걸 얻기 위해서는 더 많은 것이 필요합니다 ... – Rooke

+0

+1 웃음. :) 물론 정확한 답을 얻기 위해서. – kcoppock

관련 문제