Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串(格式类似于ArrayList<;String>;)转换为实际的ArrayList<;字符串>;_Java_String_Struts2_Arraylist - Fatal编程技术网

Java 将字符串(格式类似于ArrayList<;String>;)转换为实际的ArrayList<;字符串>;

Java 将字符串(格式类似于ArrayList<;String>;)转换为实际的ArrayList<;字符串>;,java,string,struts2,arraylist,Java,String,Struts2,Arraylist,我正在尝试将字符串转换为ArrayList。例如,my Struts2 webapp以类似以下格式返回名为row的字符串: [A,BB,CCC,DDDD,1,0,1](沿着这些线的东西) 我需要将它们转换为ArrayList,以便在另一个JSP页面中预填充一些表单。我硬编码了一个将这些字符串转换为列表形式的方法: StringBuffer rowBuffer = new StringBuffer(row); int startIndex = 0;

我正在尝试将字符串转换为ArrayList。例如,my Struts2 webapp以类似以下格式返回名为row的字符串:

[A,BB,CCC,DDDD,1,0,1](沿着这些线的东西)

我需要将它们转换为ArrayList,以便在另一个JSP页面中预填充一些表单。我硬编码了一个将这些字符串转换为列表形式的方法:

        StringBuffer rowBuffer = new StringBuffer(row);
        int startIndex = 0;
        int endIndex = rowBuffer.indexOf(",") - 1;
        rowBuffer.deleteCharAt(rowBuffer.indexOf("["));
        rowBuffer.deleteCharAt(rowBuffer.indexOf("]"));
        while(startIndex != -1 && endIndex != -1 && startIndex < endIndex)
        {
          String subString = rowBuffer.substring(startIndex, endIndex);

       if(subString.contains(","))
       {
          rowList.add(" ");
          startIndex = endIndex + 1;
          endIndex = rowBuffer.indexOf(",", startIndex);
       }

       else
       {
        rowList.add(subString);
        startIndex = endIndex + 2;
        endIndex = rowBuffer.indexOf(",", startIndex + 1);
       }

       if(endIndex == -1)
       {
          rowList.add(rowBuffer.substring(startIndex));
          break;
       }
    }
StringBuffer rowBuffer=新的StringBuffer(行);
int startIndex=0;
int endIndex=rowBuffer.indexOf(“,”)-1;
rowBuffer.deleteCharAt(rowBuffer.indexOf(“[”));
rowBuffer.deleteCharAt(rowBuffer.indexOf(“]);
while(startIndex!=-1&&endIndex!=-1&&startIndex
在所有字段都已填充的情况下,此操作非常有效。但是,假设我有一个如下的字符串:[a,BB,,1,0,0](第3和第4个字段丢失),然后我得到了一些不起作用的内容(空白元素注册不正确,列表的大小是6,而它应该是7)。有比硬编码更优雅的解决方案吗?如果没有,有人能告诉我如何处理带有空白字段的案例的正确方向吗?谢谢

请试试这个:

import java.util.regex.*;

// ...

// Working code    
rowBuffer.deleteCharAt(rowBuffer.indexOf("["));
rowBuffer.deleteCharAt(rowBuffer.indexOf("]"));
// Create a pattern to match breaks
Pattern p = Pattern.compile("\\s*,\\s*");
// Split input with the pattern
String[] result = p.split(rowBuffer);
rowList = new ArrayList(Arrays.asList(result)); 
注意:这预先假定字符串本身不包含逗号且不带引号。如果要在字段和引号中使用逗号解析实际CSV,请不要使用正则表达式和拆分;而是使用专用的状态机CSV解析器(这里有一个示例:-或者您可以使用自己的,如)

请尝试以下方法:

import java.util.regex.*;

// ...

// Working code    
rowBuffer.deleteCharAt(rowBuffer.indexOf("["));
rowBuffer.deleteCharAt(rowBuffer.indexOf("]"));
// Create a pattern to match breaks
Pattern p = Pattern.compile("\\s*,\\s*");
// Split input with the pattern
String[] result = p.split(rowBuffer);
rowList = new ArrayList(Arrays.asList(result)); 

注意:这预先假定字符串本身不包含逗号且不带引号。如果要在字段和引号中使用逗号解析实际CSV,请不要使用正则表达式和拆分;使用一个专用的状态机CSV解析器(这里有一个例子:-或者你也可以使用自己的解析器)

好吧,我对代码做了一点修改,使其正常工作(这可能远不是最优雅的解决方案,但它对我有效

    StringBuffer rowBuffer = new StringBuffer(row);
    int startIndex = 0;
    int endIndex = rowBuffer.indexOf(",") - 1;
    rowBuffer.deleteCharAt(rowBuffer.indexOf("["));
    rowBuffer.deleteCharAt(rowBuffer.indexOf("]"));
    while(startIndex != -1 && endIndex != -1 && startIndex < endIndex)
    {
      String subString = rowBuffer.substring(startIndex, endIndex);

       if(subString.contains(","))
       {
          rowList.add(" ");
          startIndex = endIndex - 1;
          endIndex = rowBuffer.indexOf(", ", startIndex + 1);
       }

       else
       {
         if(subString.equals("1"))
             rowList.add("True");
         else if(subString.equals("0"))
             rowList.add("False");
         else
          rowList.add(subString);
        startIndex = endIndex + 2;
        endIndex = rowBuffer.indexOf(",", startIndex + 1);
       }

       if(endIndex == -1)
       {
          if(subString.equals("1"))
             rowList.add("True");
          else if(subString.equals("0"))
             rowList.add("False");
          break;
       }
    }
StringBuffer rowBuffer=新的StringBuffer(行);
int startIndex=0;
int endIndex=rowBuffer.indexOf(“,”)-1;
rowBuffer.deleteCharAt(rowBuffer.indexOf(“[”));
rowBuffer.deleteCharAt(rowBuffer.indexOf(“]”);
while(startIndex!=-1&&endIndex!=-1&&startIndex
我对我的代码做了一点修改,使其正常工作(这可能远不是最优雅的解决方案,但它对我来说很有效

    StringBuffer rowBuffer = new StringBuffer(row);
    int startIndex = 0;
    int endIndex = rowBuffer.indexOf(",") - 1;
    rowBuffer.deleteCharAt(rowBuffer.indexOf("["));
    rowBuffer.deleteCharAt(rowBuffer.indexOf("]"));
    while(startIndex != -1 && endIndex != -1 && startIndex < endIndex)
    {
      String subString = rowBuffer.substring(startIndex, endIndex);

       if(subString.contains(","))
       {
          rowList.add(" ");
          startIndex = endIndex - 1;
          endIndex = rowBuffer.indexOf(", ", startIndex + 1);
       }

       else
       {
         if(subString.equals("1"))
             rowList.add("True");
         else if(subString.equals("0"))
             rowList.add("False");
         else
          rowList.add(subString);
        startIndex = endIndex + 2;
        endIndex = rowBuffer.indexOf(",", startIndex + 1);
       }

       if(endIndex == -1)
       {
          if(subString.equals("1"))
             rowList.add("True");
          else if(subString.equals("0"))
             rowList.add("False");
          break;
       }
    }
StringBuffer rowBuffer=新的StringBuffer(行);
int startIndex=0;
int endIndex=rowBuffer.indexOf(“,”)-1;
rowBuffer.deleteCharAt(rowBuffer.indexOf(“[”));
rowBuffer.deleteCharAt(rowBuffer.indexOf(“]);
while(startIndex!=-1&&endIndex!=-1&&startIndex
假设格式如所指定,则您可以简单地:

  • 拆下周围的支架(使用简易工具)
  • 然后在
    ,“
    (逗号和空格)
  • 使用将
    字符串[]
    包装到
    列表中
    
    • 如有必要,使用该选项填充
      ArrayList
请注意,如果元素本身可以包含“
”、“
”,则此操作将中断。要使其正常工作,该字符串必须是分隔符,而不是实际标记的一部分

下面是一个片段来说明:

    String s = "[A, BB, CCC, DDDD, 1, 0, 1]";
    String[] parts = s.substring(1, s.length() - 1).split(", ");
    List<String> list = new ArrayList(Arrays.asList(parts));

    for (String part : list) {
        System.out.print("{" + part + "} ");
    } // {A} {BB} {CCC} {DDDD} {1} {0} {1} 
String s=“[A,BB,CCC,DDDD,1,0,1]”;
String[]parts=s.substring(1,s.length()-1);
List List=newarraylist(Arrays.asList(parts));
用于(字符串部分:列表){
系统输出打印(“{”+部分+“}”);
}//{A}{BB}{CCC}{DDDD}{1}{0}{1}

假设格式如所指定,则您可以简单地:

  • 拆下周围的支架(使用简易工具)
  • 然后在
    ,“
    (通信