Java 如何启动字符串数组?

Java 如何启动字符串数组?,java,Java,我突然想到在程序中启动字符串数组。其思想是从扫描器读取字符串输入,并生成一个字符串数组。我是这样写的, Scanner sc = new Scanner(System.in); String parts [] ; while(sc.hasNext() ){ String str = sc.nextLine(); // the str value suppose to be *1, 2, 3, 4, 5, 99, 1, 2, 3,

我突然想到在程序中启动字符串数组。其思想是从扫描器读取字符串输入,并生成一个字符串数组。我是这样写的,

    Scanner sc = new Scanner(System.in);

    String parts [] ; 

    while(sc.hasNext() ){

        String str = sc.nextLine(); 

        // the str value suppose to be *1, 2, 3, 4, 5, 99, 1, 2, 3, 4, 5*
        parts = new String[] { str.split(", ")}; // need correction 

    } 
我实际上需要一个整数数组,但是,我最好在下一次迭代中使用

Ingeter.valueOf(str_value)

如何在while循环中正确写入字符串数组生成?

split
已返回
String[]
数组,因此只需将其分配给
字符串部分[]
参考:

parts = str.split(", ");

看到注释中有些混乱,您可能更适合使用
列表
,而不是数组。下面是一个工作示例:

List parts = new ArrayList();

while (sc.hasNext()) 
{
    String str = sc.readLine();

    for (String i : str.split(", ")) 
    {
        parts.add(Integer.valueOf(Integer.parseInt(i)));
    }
}

我在下面提供了完整的解决方案,您可以得到一个不成对的元素

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in); 
    boolean bol = false; 

    Map<Integer, Integer> map = new HashMap<Integer, Integer>();

    while(sc.hasNext() ){

        String str = sc.nextLine(); 

        for (String s: str.split(", ") ){

            int t = Integer.valueOf(s); 
            map.put(t, map.containsKey(t) ? map.get(t) + 1 : 1);
        }      
    } 


    if (bol){

        for (Map.Entry<Integer, Integer> entry : map.entrySet() ){


        if ( entry.getValue() == 1){
            System.out.println(entry.getKey());
        }
    }
    }

    else {

        Iterator it = map.entrySet().iterator();

        while ( it.hasNext() ){

            Map.Entry pair = (Map.Entry) it.next();

            if ( pair.getValue() == 1 ){

                System.out.println(pair.getKey());
            }
        }

    }

}
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
布尔bol=假;
Map Map=newhashmap();
while(sc.hasNext()){
字符串str=sc.nextLine();
对于(字符串s:str.split(“,”)){
int t=整数。值为(s);
map.put(t,map.containsKey(t)?map.get(t)+1:1;
}      
} 
如果(bol){
对于(Map.Entry:Map.entrySet()){
if(entry.getValue()==1){
System.out.println(entry.getKey());
}
}
}
否则{
迭代器it=map.entrySet().Iterator();
while(it.hasNext()){
Map.Entry对=(Map.Entry)it.next();
if(pair.getValue()==1){
System.out.println(pair.getKey());
}
}
}
}

str.split(“,”?“String parts[];”的返回类型是什么?甚至不是正确的声明。它应该是“String[]parts;”@Arsen Nope<代码>字符串部分[]是一个有效的java声明。@Arsen它是正确的,只是不经常使用(添加它是为了让C程序员在java中感觉更好)。实际上,这两个声明都是正确的。是的,str.split(“,”)已经是一个数组。但是,我不能在while循环之外访问它。编译器告诉我变量部分没有启动。好吧,那为什么我不能在while循环之外访问它呢?我编写了另一个for循环,编译器告诉我们Sting数组变量没有启动。对于(字符串s:parts){System.out.println(s);}@MonicaHübner:如果没有用户输入会发生什么<代码>while(sc.hasNext())可能永远不会为真。(坦白地说,最简单的解决方案可能就是根本没有循环,只需要无条件地获取一行。)@MonicaHübner因为根据编译器,您可能永远不会输入
,而(sc.hasNext())
(当
hasNext
在第一次调用时将返回
false
)在这种情况下,您的数组仍然不会初始化。在这种情况下,try/catch可能会起作用?5分钟后我有一个电话面试,然后我会回来。把它初始化为一个空数组怎么样?谢谢你提供答案。这对我帮助很大。阅读提示: