2017-02-24 351 views
-1

我試圖在字符串中使用'\ 034'字段分隔符作爲分隔符。 問題是,當我對「\ 034」+ opField進行硬編碼並將其寫入其工作的文件時,但是如果從文件中讀取「\ 034」字符,則會將輸出寫爲字符串「col1 \ 034col2」。嘗試使用StringBuilder的,但它逃脫\ 034「\\ 034」 我使用下面的代碼來讀取文件的字符:Java使用 034作爲字符串中的分隔符

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; 
      } 

歡迎任何幫助......

[更新]:同樣的事情發生在'\ t'字符上,如果編碼正確,但是如果從文件中讀取它的附加字符。「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); 

輸出:

SB標題列數: 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

部首列數: 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

在上面的代碼,如果我做的我得到正確的結果如下:

headerCols+= "\034"+ colAl; 

輸出: SPRN_CO_IDFISC_YR_MTH_DSPLY_CDCST_OBJ_CDPRFT_CTR_CDLEGL_CO_CDHEAD_CT_TYPE_IDFIN_OWN_CDFUNC_AREA_CDHEAD_CT_NR 的FS字符存在,即使他們在這裏歌廳

+1

您還沒有發佈相關的代碼。你說「它把輸出寫成字符串」col1 \ 034col2'「,但是你沒有包括寫輸出的代碼*!這個代碼很可能是問題所在(但它可能不是問題,它只是你輸出到屏幕的方式的結果) –

+0

你能舉一個例子嗎?我很確定'col0 \ tcol1'會在哪裏發生,'col0'和'col1'是什麼意思。 – Thomas

+0

已更新輸出代碼 – vhora

回答

0

刪除你應該提供一個例子證明你的問題。不只是不完整的代碼片段。

以下可運行代碼段會執行您所解釋的操作。

// 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

對不起,如果我不清楚。在我的場景中,我正在從文件中讀取\ 034,這就是我遇到上述問題的地方。 – vhora

+0

@vhora然後提供一個小例子來說明問題。否則,我們只能猜測你實際做了什麼以及你閱讀的文件是什麼。 – SubOptimal

+0

謝謝@SubOptimal,但是在漫長的一天結束時,這個問題被雜亂地混淆了。無論如何,感謝您的幫助.. – vhora

相關問題