2017-02-24 44 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

相关问题