Java String split()分隔符,用于零长度值

时间:2012-06-19 09:58:54

标签: java string delimiter zero

我想拆分从数据库结果集行生成的以下字符串。

示例行:

A)(74,“和那里”,“是一辆汽车”,“在”,“车库男人”中,t)

B)(17,account3 ,,,, t)

我想要一个输出如下(管道|来分隔分割元素):

A)74 |那里|是一辆车|在|车库男人|吨

B)17 | account3 | | | |吨

我希望零长度值在我的应用程序中存储为null。这是我的源代码:

public void refreshSearchTable (ArrayList<String> newData){
        int noOfRows = newData.size();
        int noOfColumns = gui.getTableSearchResultHeader().length + 1;
        Object[][] tempList = new Object[noOfRows][noOfColumns];
        String rowResult = "";
        String delims = "[,()\"]+";
        String [] tokens;
        Object [] elements = newData.toArray();

        int j = 0;
        for (int i = 0; i < noOfRows; i++){
            rowResult = elements[i].toString();
            System.out.println("rowresult: " + rowResult);
            tokens = rowResult.split(delims, -1);
            for (String t : tokens){

                System.out.println("j: " + j + "t: " + t);

                if (j == 1){ ... }
                else if (j==2){ ... }
                                ...

                j++;
            }
            j=0;
        }
    }

“[,()\”] +“对于非零长度值工作正常。我能够根据索引值j选取正确的子字符串。我读过将负值传递给split(,)不会丢弃非零长度值...但确实如此。我做错了什么?

4 个答案:

答案 0 :(得分:3)

也许你可以试试.split("[()\"]*,{1}[()\"]*");

[,()\"]+之前的表达式用户将使用多个逗号或任何其他分隔符作为分隔符。例如,,,将被视为一个[],[]。上面评论的表达式,期望零个或多个分隔符后面只跟一个逗号,这也可以跟零个或多个分隔符。

答案 1 :(得分:0)

为什么你没有使用String.replace or replaceall,它将作为你当前的程序,但如果你需要跳过字符串的空白部分,你应该首先

  • 创建字符串构建器
  • 附加来自输入数组列表的所有数据(如果数据长度== 0或数据为空则只有跳过它就有条件)
  • 最后添加您的符号|

答案 2 :(得分:0)

int split()参数表示结果数组的最大长度。所以我认为你应该自己决定使用方法String#isempty()

查看更多详情:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String,int)

答案 3 :(得分:0)

谢谢Spaeth。这是我需要的方式。很抱歉我在原始问题中添加了管道。我只是键入它们以分离元素。我根据逗号定义的特定索引需要元素,以便从结果集中维护列。

public void refreshSearchTable (ArrayList<String> newData){
        int noOfRows = newData.size();
        int noOfColumns = gui.getTableSearchResultHeader().length + 2;
        Object[][] tempList = new Object[noOfRows][noOfColumns];
        String rowResult = "";
        String delims = "[()\"]*,{1}[()\"]*";
        String [] tokens;
        Object [] elements = newData.toArray();

        int j = 0;
        for (int i = 0; i < noOfRows; i++){
            rowResult = elements[i].toString();
            if (rowResult.startsWith("(")){
                rowResult = rowResult.substring(1);
            }
            if (rowResult.endsWith(")")){
                rowResult = rowResult.substring(0, rowResult.length()-1);
            }
            System.out.println("rowresult: " + rowResult);
            tokens = rowResult.split(delims);
            for (String t : tokens){

                System.out.println("j: " + j + "t: " + t);

                j++;
            }
            j=0;
        }

输出:

rowresult: 74,"and there","is a car","in the","garage man",t
j: 0t: 74
j: 1t: and there
j: 2t: is a car
j: 3t: in the
j: 4t: garage man
j: 5t: t