Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 将逗号(带空格)分隔的字符串转换为字符串本身匹配值下的列_Java_String_Comma_Delimited - Fatal编程技术网

Java 将逗号(带空格)分隔的字符串转换为字符串本身匹配值下的列

Java 将逗号(带空格)分隔的字符串转换为字符串本身匹配值下的列,java,string,comma,delimited,Java,String,Comma,Delimited,我的代码在控制台中有一个输出,如下面给出的示例所示 ... columns=20xs, viewport_supported=true, wta=false, ..., mmf=false ... columns=11xs, viewport_supported=false, wta=false, ..., mmf=true ... columns=15xs, viewport_supported=true, wta=false, ..., mmf=false 我想通过提取“=”符号左边的公

我的代码在控制台中有一个输出,如下面给出的示例所示

... columns=20xs, viewport_supported=true, wta=false, ..., mmf=false
... columns=11xs, viewport_supported=false, wta=false, ..., mmf=true 
... columns=15xs, viewport_supported=true, wta=false, ..., mmf=false
我想通过提取“=”符号左边的公共字符串来重新排列它,并将其作为列标题及其列中的值。如何在Java中开始这样做

我正在寻找如下输出:

columns      viewport_supported        wta     and so on
  20xs              true              false
  11xs              false             false
  15xs              true              false

查看
String
类的
split
方法。您可能希望使用它将每一行拆分为单独的
column=value
部分,然后再次从值中拆分列。这应该可以让你开始——如果你被卡住了,再问一次。

好了,开始吧。这里有一个使用

首先,这里有一个名为
Table
的助手类(不要与Guava的
Table
接口混淆):


如果行具有可变内容(并非所有行都包含相同的列),那么这将非常困难,这就是为什么我强制所有行必须包含相同的列。请随意更改(或其他任何内容)。

我最近做了与您尝试做的完全相同的事情

我不确定您的数据是如何存储的,但出于演示目的,我使用了字符串“a”。 假设字符串“a”包含:

String a = 20xs, true, false;
然后,您可以使用
split()。以下代码执行以下操作:

a = a.trim();
String[] words = a.split(","); // creates array of Strings with each words in String a
// words would contain [20xs] [true] [false] 
我已经写了一个函数,它将在每个单词的后面填充空格

/** Add spaces to Strings so that all of the are of same number of characters
 *  @param str  String to be padded
 *  @param n    total number words String should be padded to
 * @return str  Padded string 
 */
private String padString(String str, int n){
    if(str.length() < n){
        for(int j = str.length(); j < n; j++){
            str += " ";
        } // end for
    } // end if

    return str;
} // end padString
编写上述代码时,您将在控制台中看到以下内容:

20xs           true           false    
如果需要更大的间隙,可以在
padString()
函数中传递更高的值。
正如我所看到的,列标题始终是相同的,您可以在开始时使用相同的填充量编写println代码,因此它总是从开头开始,就像标题一样


我希望这能有所帮助。

我终于可以这样做了:使用Split()方法拆分字符串,创建一个映射动态数组,并在“等于符号”的任一侧分别为字符串分配键和值。然后通过解析表示第一个数据行的映射来打印标题信息,然后通过迭代映射中的对象来打印所有数据行。下面是我代码的摘录

/* delimiter */
            String delimiter = ", ";
//给定的字符串将由提供的参数分隔符分割

            String[] temp = capabilities.split(delimiter);

            /* print substrings */
            Map<String, String> row = new HashMap<String, String>();
            for (int i = 0; i < temp.length; i++) {
                String delimiter1 = "=";
                String[] temp1 = null;
                temp1 = temp[i].split(delimiter1);
                if (temp1 != null && temp1.length == 2) {
                    row.put(temp1[0], temp1[1]);
                }
            }
            dataRows.add(row);
// print the header --- but first, get the header information by parsing the map representing the first data row
        List<String> fieldNames = new ArrayList<String>();
        Map<String, String> firstRow = dataRows.get(0);
        for (String fieldName : firstRow.keySet()) { 
            fieldNames.add(fieldName);
        }
        for (String fieldName : fieldNames) {
                            System.out.print("\t" + fieldName);

        }

        // now, print all data rows
        for (Map<String, String> dataRow : dataRows) { 
            System.out.println("\n");
            for (String fieldName : fieldNames) {
            System.out.print("\t" + dataRow.get(fieldName));}
String[]temp=capabilities.split(分隔符);
/*打印子字符串*/
Map row=newhashmap();
对于(int i=0;i

谢谢大家的帮助。

从现在开始拆分!String[]temp;String delimiter=“,”;temp=myString.split(delimiter);for(int i=0;iSystem.out.println(padString(words[0],15) + padString(words[1],15) + padString(words[2],15) // So the result will be [20xs ] [true ] [false ]
20xs           true           false    
/* delimiter */
            String delimiter = ", ";
            String[] temp = capabilities.split(delimiter);

            /* print substrings */
            Map<String, String> row = new HashMap<String, String>();
            for (int i = 0; i < temp.length; i++) {
                String delimiter1 = "=";
                String[] temp1 = null;
                temp1 = temp[i].split(delimiter1);
                if (temp1 != null && temp1.length == 2) {
                    row.put(temp1[0], temp1[1]);
                }
            }
            dataRows.add(row);
// print the header --- but first, get the header information by parsing the map representing the first data row
        List<String> fieldNames = new ArrayList<String>();
        Map<String, String> firstRow = dataRows.get(0);
        for (String fieldName : firstRow.keySet()) { 
            fieldNames.add(fieldName);
        }
        for (String fieldName : fieldNames) {
                            System.out.print("\t" + fieldName);

        }

        // now, print all data rows
        for (Map<String, String> dataRow : dataRows) { 
            System.out.println("\n");
            for (String fieldName : fieldNames) {
            System.out.print("\t" + dataRow.get(fieldName));}