繁体   English   中英

如何在特定情况下将此数组转换为列表?

How do I convert this array into list in my specific case?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我已经遍历了数组B 检查arrayList A是否存在公共元素。 然后删除这些元素,并打印出A作为数组。

但是我的问题是如何打印出A (在我的程序中是System.out.println(crIss.get(m)); )作为arrayList(只是一个没有[]括号的元素列表)而不是数组?

这是我正在处理的完整代码:

package issuetracking;

import java.util.*;

public class IssueTrackingObject {

    ArrayList<String> crIss = new ArrayList<String>();

    Scanner input = new Scanner(System.in);
    boolean crIss_bool;
    int numOfSolvedIss;
    private String[] solvedIss;

    //lets user create some issues and add them into an arrayList
    public void createIssue() {
        System.out.println("Enter 5 issues: ");

        for (int i = 0; i < 5; i++) {
            System.out.println("Issue " + (i + 1 + ": "));
            crIss_bool = crIss.add(input.nextLine());
        }

    }
//Let user mark some issues as solved (which are already in the list that the user has just created)

    public void solvedIssue() {
        System.out.println("How many solved issue you have(Must be less than 5): ");
        numOfSolvedIss = input.nextInt();

        solvedIss = new String[numOfSolvedIss];

        for (int k = 0; k < numOfSolvedIss; k++) {
            System.out.print("Enter solved issue(REMEMBER THAT THE SOLVED ISSUE MUST BE FROM ONE OF THEM YOU ALREADY HAVE CREATED)no. " + (k + 1) + ": ");

            solvedIss[k] = input.next();
        }

    }

    public void printUnsolvedIssue() {

for(int m=0; m<solvedIss.length;m++){
      crIss_bool = crIss.remove(solvedIss);

    System.out.println(crIss.get(m));   
}


    }


    public void printSolvedIssue() {
        System.out.println("");
        System.out.println("LIST OF SOLVED ISSUE:");

        for (int l = 0; l < solvedIss.length; l++) {
            System.out.printf("%s ", solvedIss[l]);
        }

    }

}

主类:

package issuetracking;

import java.util.*;

public class IssueTracking {

    static Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        IssueTrackingObject its = new IssueTrackingObject();

        System.out.println("                            WELCOME TO ISSUE TRACKING SYSTEM!\n\n");
        System.out.println("Choose from menu: ");
        System.out.println("1. Create new issue\n2. Mark issue(s) as solved\n"
                + "3. View solved issue(s)\n4. View unsolved issue(s)");
        System.out.println("Enter you choise:");
        //String userChoise = input.next();
        //switch-case

        while (true) {
            String userChoise = input.next();

            switch (userChoise) {
                case "1":
                    //System.out.println("Enter 5 issues: ");
                    //call appropriate issue
                    its.createIssue();
                    break;
                case "2":
                    //System.out.println("Mark solved issues (You must enter at least one issue): ");
                    //call appropriate issue
                    its.solvedIssue();
                    break;
                case "3":
                    System.out.println("Solved issue: ");
                    //call appropriate method
                    its.printSolvedIssue();
                    break;

                case "4":
                    System.out.println("Usolved issue: ");
                    //call appropriate issue
                    its.printUnsolvedIssue();
                    break;
                default:
                    System.out.println("Invalid input");
                    break;

            }

        }

    }

}
3 个回复

当您打印类似ArrayList的对象时,您遇到的打印行为是因为Java调用了Class的.toString()方法。 ArrayList.toString()继承自AbstractCollection.toString() ,该文档可在此处找到。

我建议更改此行为的方法是创建一个类似于以下内容的单独的Print函数:

public void printList(ArrayList<String> list)
{
     for(String str : list)
     {
          System.out.print(str+" ");
     }
     System.out.println();
}

然后调用此函数代替您的打印语句:

printList(crIss);

请注意,此打印将在一行上打印列表中的每个元素,并用空格隔开。

有几种方法可以做到这一点。 我给你看三个:

  1. 将数据存储在String并删除不需要的字符:

     String tmp = crIss.toString(); tmp = tmp.substring(1, tmp.length() - 1); System.out.println(tmp); 
  2. 与上述方法类似,但使用replace

     String tmp = crIss.toString().replace('[', '\\0').replace(']', '\\0'); System.out.println(tmp); 
  3. 遍历List并将值存储在StringBuilder

     StringBuilder sb = new StringBuilder(); for (String string : crIss) { sb.append(string).append(", "); } sb.remove(sb.length() - 2, sb.length()); System.out.println(sb.toString()); 

只需遍历crIss并打印其中的每个项目,然后打印所需的定界符即可。 在此示例中,我将用“,”分隔项目。

public void printUnsolvedIssue() {

   for(int m=0; m<solvedIss.length;m++){
       crIss.remove(solvedIss[i]);
   }

   for(int i = 0; i < crIss.size(); i++) {
       System.out.print(crIss.get(i));
       // only print the delimiter if it isn't the last item in the list
       if(i < crIss.size() - 1) {
           System.out.print(", ");
       }
   }
}

还要注意,我将crIss.remove(solvedIss)部分更改为crIss.remove(solvedIss[i]) 这样,它将删除solvedIss中的每个项目。

1 在特定情况下将命令输出转换为字典

我扮演以下角色: 现在, response.stdout看起来完全像: 如何将其转换为字典列表(如{"Server": "10.8.7.1", "Domain": "com","State": "Health","Type": "B"} ))? 我考虑编写自己的python ...

2019-01-22 19:20:17 1 22   ansible
8 在特定情况下将bytearray转换为字符串

我在Python 2.7中编写了一个小应用程序来比较MSSQL和Sqlite数据库,我对二进制数据类型( binary , varbinary , image等)有一些问题。 在服务器端是一个用C#编写的应用程序,它将数据发送到移动设备,但首先将二进制类型转换为十六进制。 例如: 在 ...

2012-11-23 12:49:52 1 837   c#/ python
9 在numpy数组的每一行中,我都有一个int和一个Python int列表。 如何在不使用熊猫的情况下将此列表转换为numpy int数组?

我有一个numpy数组,其中每行包含一个int列表和一个int python列表。 如何将列表转换为numpy数组? 我正在处理非常大的数组,因此我想避免使用Pandas,因为将其加载到Pandas中会占用更多内存。 样本变量: 我正在寻找的样本结果(可能已经重新排列了一些数字 ...

10 特定情况下Python中的列表推导

我的目标是检查lst_a所有嵌套列表,如果第一个条目 == lst_b中任何元素的第一个条目。 如果不是只复制那个子列表。 在这个例子中,他不会复制lst_a[0]而是 1 和 2。 我试图通过列表理解来实现我的目标,但它不起作用。 创建元组或字典是不可能的,因为整个过程处于循环中,每秒钟 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM