2017-02-24 2 views
-1

Ich versuche, Feldtrennzeichen '\ 034' als Trennzeichen in einer Zeichenfolge zu verwenden. Das Problem ist, wenn ich "\ 034" + opField fest codiere und es in eine Datei schreibe, aber wenn das "\ 034" Zeichen aus einer Datei gelesen wird, schreibt es die Ausgabe als Zeichenfolge "col1 \ 034col2". I mit Stringbuilder versucht, aber es entgeht die \ 034 „\\ 034“ ich den folgenden Code bin mit dem Zeichen aus der Datei zu lesen.Java mit 034 als Trennzeichen in einer Zeichenfolge

try (BufferedReader br = new BufferedReader(new FileReader(fConfig))){ 
       int lc = 1; 
       for(String line;(line = br.readLine())!=null;){ 
        String[] rowList = line.split(delim); 
        int row_len = rowList.length; 
        if (row_len<2){ 
         System.out.println("Incorrect dictionary file row:"+fConfig.getAbsolutePath()+"\nNot enough values found at row:"+line); 
        }else{ 
         String key = rowList[0]; 
         String value = rowList[1]; 
         dictKV.put(key, value); 
        } 
        lc++; 
       } 
      }catch(Exception e){ 
       throw e; 
      } 

Jede Hilfe ist willkommen ...

[ update]: Dasselbe passiert mit dem Zeichen '\ t', wenn es gut codiert ist, aber wenn es aus einer Datei gelesen wird, wird es als Zeichen angehängt. "col0 \ tcol1"

if(colAl.toLowerCase().contains(" as ")){ 
        String temp = colAl.replaceAll("[ ]+as[ ]+"," | "); 
        ArrayList<String> tempA = this.brittle_delim(temp,'|'); 
        colAl = tempA.get(tempA.size()-1); 
        colAl = colAl.trim(); 
       }else { 
        ArrayList<String> tempA = this.brittle_delim(colAl,' '); 
        colAl = tempA.get(tempA.size()-1); 
        colAl = colAl.trim(); 
       } 
       if(i==0){ 
        sb.append(colAl); 
        headerCols+=colAl.trim(); 
       }else{ 
        headerCols+= this.output_field_delim + colAl; 
        sb.append(this.output_field_delim); 
        sb.append(colAl); 
       } 

      } 
     } 

     System.out.println("SB Header Cols:"+sb.toString()); 
     System.out.println("Header Cols:"+headerCols); 

Output:

SB-Header Cols: SPRN_CO_ID \ 034FISC_YR_MTH_DSPLY_CD \ 034CST_OBJ_CD \ 034PRFT_CTR_CD \ 034LEGL_CO_CD \ 034HEAD_CT_TYPE_ID \ 034FIN_OWN_CD \ 034FUNC_AREA_CD \ 034HEAD_CT_NR

Kopf Cols: SPRN_CO_ID \ 034FISC_YR_MTH_DSPLY_CD \ 034CST_OBJ_CD \ 034PRFT_CTR_CD \ 034LEGL_CO_CD \ 034HEAD_CT_TYPE_ID \ 034FIN_OWN_CD \ 034FUNC_AREA_CD \ 034HEAD_CT_NR

In dem obigen Code, wenn ich die folgend ich korrekte Ergebnisse bin immer:

headerCols+= "\034"+ colAl; 

Ausgabe: SPRN_CO_IDFISC_YR_MTH_DSPLY_CDCST_OBJ_CDPRFT_CTR_CDLEGL_CO_CDHEAD_CT_TYPE_IDFIN_OWN_CDFUNC_AREA_CDHEAD_CT_NR Die FS-Zeichen werden dort, auch wenn sie hier sind geting

entfernt
+1

Sie haben nicht den entsprechenden Code geschrieben. Sie sagen "es schreibt die Ausgabe als Zeichenfolge" col1 \ 034col2 "." Aber Sie haben nicht den Code *, der die Ausgabe * schreibt geschrieben! Dieser Code ist höchstwahrscheinlich das Problem ist (aber es ist wahrscheinlich kein Problem, es ist nur ein Ergebnis der Art und Weise, wie Sie die Ausgabe auf den Bildschirm schreiben) –

+0

Können Sie ein Beispiel geben? Ich bin mir ziemlich sicher, wo das 'col0 \ tcol1' passieren würde und was' col0' und 'col1' gemeint sind. – Thomas

+0

Aktualisierte den Ausgabecode – vhora

Antwort

0

Sie sollten ein Beispiel geben, Ihr Problem zu demonstrieren. Nicht nur unvollständige Code-Schnipsel.

Das folgende ausführbare Snippet macht das, was Sie erklärt haben.

// create a file one line 
byte[] bytes = "foo bar".getBytes(StandardCharsets.ISO_8859_1); 
String fileName = "/tmp/foobar"; 
Files.write(Paths.get(fileName), bytes); 

String headerCols = ""; 
String outputFieldDelim = "\034"; 
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { 
    // read the line from the file and split by blank character 
    String[] cols = br.readLine().split(" "); 

    // contcatenate the values with "\034" 
    // but ... for your code ... 
    // don't concatenate String objects in a loop like below 
    // use a StringBuilder or StringJoiner instead 
    headerCols += outputFieldDelim + cols[0]; 
    headerCols += outputFieldDelim + cols[1]; 
} 
// output with the "\034" character 
System.out.println(headerCols); 
+0

Sorry, wenn ich nicht klar war. In meinem Szenario lese ich auch das \ 034 aus der Datei, und das ist, wo ich auf das obige Problem stoße. – vhora

+0

@vhora Dann ein kleines Beispiel, das das Problem zeigt. Ansonsten können wir nur raten, was Sie tatsächlich tun und was in der Datei steht, die Sie lesen. – SubOptimal

+0

Danke @SubOptimal, aber die Frage wurde in einer zufälligen Unordnung am Ende eines sehr langen Tages gestellt. Danke für Ihre Hilfe trotzdem .. – vhora

Verwandte Themen