如何在java中循环String ArrayList以及如何拆分其中的元素

时间:2018-04-30 15:24:28

标签: java arrays string arraylist

我必须编写一个程序来打印从用户输入的字符串,并将第一个字母替换为"#":

import java.util.*;

public class CensuraLaPrima {

    public static void main(String[] args) {
        Scanner s= new Scanner (System.in);
        String tdc;
        ArrayList <String> Parolecens= new ArrayList <String>();

        while (s.hasNextLine()) {
            tdc=s.nextLine();
            Parolecens.add(tdc);
        }

        System.out.println(Parolecens);
    }
}

用户可以输入他想要的字符串数。我想用Split方法拆分字符串,但它不适用于ArrayList。

apr 30, 2018 4:42:15 PM org.apache.catalina.startup.Bootstrap initClassLoaders
GRAVE: Class loader creation threw exception
java.io.IOException: La sintassi del nome del file, della directory o del volume non è corretta
    at java.io.WinNTFileSystem.canonicalize0(Native Method)
    at java.io.WinNTFileSystem.canonicalize(Unknown Source)
    at java.io.File.getCanonicalPath(Unknown Source)
    at java.io.File.getCanonicalFile(Unknown Source)
    at org.apache.catalina.startup.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:174)
    at org.apache.catalina.startup.Bootstrap.createClassLoader(Bootstrap.java:139)
    at org.apache.catalina.startup.Bootstrap.initClassLoaders(Bootstrap.java:80)
    at org.apache.catalina.startup.Bootstrap.init(Bootstrap.java:199)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:398)

3 个答案:

答案 0 :(得分:1)

通过Java中的正则表达式帮助解决字符串中替换字符的任务。除了通过Pattern类显式使用正则表达式之外,Java还提供了一个便利API,可以通过String方法直接在replaceAll类上使用正则表达式功能。

以不区分大小写的方式使用#替换所有特定字符的方法的一种方法是使用replaceAll和正则表达式(?i)x,其中x是初始值您正在处理的字符串s的字符:

String result = s.replaceAll("(?i)"+s.charAt(0), "#");

在调用s.charAt(0)之前,您需要确保字符串非空。

Demo.

答案 1 :(得分:1)

如果您想用单个单词阅读,可以使用Scanner.next()代替。它基本上给你每个单词,所以每个字符串没有空格,没有换行符。如果你同时输入两个单词也可以。 我想你想做这样的事情。随意使用并改变您的需求。

import java.util.*;
public class CensuraLaPrima {

  public static void main(String[] args) {
    Scanner s= new Scanner (System.in);
    String tdc;

    while (s.hasNext()) {
      tdc=s.next();
      char c = tdc.charAt(0);
      System.out.print(tdc.replaceAll(Character.toLowerCase(c) +"|"+  Character.toUpperCase(c), "#"));
    }


}

}

编辑: 基本上它归结为这个。如果你想用扫描仪阅读单个单词而使用.next()而不是.nextLine()它会考虑按空格和换行分隔的每个单词,即使你一次放入一行。

答案 2 :(得分:-1)

假设您已成功创建ArrayList,我更喜欢使用Iterator接口访问ArrayList中的每个元素。然后,您可以使用任何String变量并为其分配ArrayList中的值。此后,您可以在刚刚创建的String变量中使用split()。像这样:

//after your while loop
Iterator<String> it = Parolecens.iterator();

String myVariable = "";
String mySplitString[];

while(it.hasNext()) {
    myVariable = it.next();
    mySplitString = myVariable.split(//delimiter of your choice);
    //rest of the code
}

我希望这有帮助:) 建议总是受到赞赏。