【问题标题】:How to loop a String ArrayList in java and how to split the elements in it如何在java中循环一个String ArrayList以及如何拆分其中的元素
【发布时间】:2018-04-30 15:24:28
【问题描述】:

我必须编写一个程序来打印用户输入的字符串,并且像第一个一样的每个字母都替换为“#”:

mum    -> #u#
dad    -> #a#
Swiss  -> #wi##  //also if it is UpperCase
Albert -> Albert //no letter is like the first

用户可以输入他想要多少个字符串。我想用 Split 方法拆分字符串,但它不适用于 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);
    }
}

【问题讨论】:

  • 我已经标记了 Java...
  • 您的代码没有显示任何尝试...我不明白您在哪里尝试拆分以及为什么?你的问题是什么 ?如何寻找像第一个字母?怎么把这封信改成#?或者如何捕捉用户输入的单词?
  • 它不起作用没有错误描述。添加错误消息或预期数据以及您得到的结果。
  • 首先,欢迎。其次,Parolecens 不应以大写字母开头。它太混乱了,不推荐。第三,请进行更多研究并阅读我将在下一条评论中提供的链接。此外,这将对您有很大帮助 - Efficient way to replace chars in a string (java)?
  • Please, do more research 然后发布您尝试过的内容,并清楚地解释什么无效并提供Minimal, Complete, and Verifiable example。阅读How to Ask a good question。请务必take the tour 并阅读this

标签: java arrays string arraylist


【解决方案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() 它会考虑用空格和换行符分隔的每个单词,即使您一次输入一整行也是如此。

【讨论】:

  • 谢谢,但是代码应该改变每个单词,而不仅仅是第一个。
  • 这改变了每一个字,把它编译并运行它。
  • 有时它不起作用:如果我写 test prova test uno due tre quattro 它会出现 #es# prova #es# uno due #re qua##ro
  • @Lory 抱歉,我忘记粘贴 Scanner.next() 而不是 nextLine() :D 现在试试。不客气
【解决方案2】:

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

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

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

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

Demo.

【讨论】:

    【解决方案3】:

    假设您已经成功创建了 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
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多