0

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

示例行:

A) (74,"and there","is a car","in the","garage man",t)

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

我想要如下输出(管道 | 分隔拆分元素):

A) 74 | 那里| 是一辆车| 在| 车库人| 高分辨率照片| CLIPARTO 吨

B) 17 | 帐户3 | | | | 吨

我想在我的应用程序中将零长度值存储为 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

4 回答 4

3

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

之前的表达式用户[,()\"]+将使用多个逗号或任何其他分隔符作为分隔符。例如,,将考虑一个,因此也是如此[],[]。上面注释的表达式期望零个或多个分隔符后跟一个逗号,这也可以跟零个或多个分隔符。

于 2012-06-19T10:11:32.767 回答
0

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

  • 创建字符串生成器
  • 追加输入数组列表中的所有数据(如果数据长度== 0或数据为空,则跳过它)
  • 最后附加您的符号 |
于 2012-06-19T10:06:51.503 回答
0

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

查看更多详细信息:

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

于 2012-06-19T10:09:03.333 回答
0

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

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
于 2012-06-19T12:17:21.767 回答