【问题标题】:Split a string in Java and picking up a part of it在 Java 中拆分字符串并提取其中的一部分
【发布时间】:2013-09-29 20:23:10
【问题描述】:

假设我从文本文件中得到一个字符串,例如

“是的 ABC 123

是 DEF 456

是的 GHI 789"

我使用此代码按空格分割字符串。

while (inputFile.hasNext())
  {
     String stuff = inputFile.nextLine();

     String[] tokens = stuff.split(" ");

     for (String s : tokens)
     System.out.println(s);
  }

但我还想将 Yes 分配给布尔值,将 ABC 分配给另一个字符串,将 123 分配给 int。 我怎样才能分别拿起它们?谢谢!

【问题讨论】:

    标签: java split


    【解决方案1】:
    boolean b=tokens[0].equalsIgnoreCase("yes");
    String name=tokens[1];
    int i=Integer.parseInt(tokens[2]);
    

    【讨论】:

    • 谢谢。但是 parseInt 是如何工作的呢?我是初学者,我不知道如何使用它
    • parseInt(<<number as string>>) 方法接受一个实际上是数字的字符串,并将其转换为 int 数据类型,但要注意字符串数据(输入数据)不是数字形式时的异常(像 190an)。
    • 不错。我不知道。感谢您的提醒
    • @JeremyZhang 有一个不错的 Java 应用程序老兄:)
    【解决方案2】:

    您能否澄清一下您所做的确切目的是什么?您可以使用 tokens[i] 引用单独的字符串,其中 i 是索引。您可以将它们放入 switch 语句(从 Java 7 开始)并匹配您要查找的单词。然后你可以采取进一步的行动,即将字符串转换为布尔值或整数。

    您也应该考虑检查输入是否有效,即使您希望文件始终将这 3 个单词用空格分隔。

    【讨论】:

    • 没什么。我只是想了解如何解决这样的问题。开关是个好主意。我会试试看它是如何工作的。谢谢!
    【解决方案3】:

    创建类 Line 和 List<Line> 将您的所有文件存储到列表中:

    public class Line{
    
    private boolean mFlag = false;
    private int  mNum = 0;
    private String  mStr;
    
    public Line(String stuff) {
        String[] tokens = stuff.split("[ ]+");
    
        if(tokens.length ==3){
            mFlag=tokens[0].equalsIgnoreCase("yes");
            mNum=Integer.parseInt(tokens[1]);
            mStr=tokens[3];
        }
    }
    }
    

    然后调用它:

    public static void main(String[] args) {
    
     List<Line> list = new ArrayList<Line>(); 
     Line line;
    
     while (inputFile.hasNext())
     {
      String stuff = inputFile.nextLine();
    
      line = new Line(stuff);
    
      list.add(line);
     }
    }
    

    【讨论】:

    • OMG......这段代码中有很多我不知道的东西。也许我会尝试一些我目前能理解的东西。还是谢谢你。
    • 只是为了将来,通过这种方式,您可以将文件存储到对象列表中,其中每个对象包含boolean、String、int
    【解决方案4】:

    如果您的输入字符串始终采用相同的格式,即boolean、String、int,那么您可以访问 token 数组的各个索引并将它们转换为您指定的格式

    boolean opinion = tokens[0].equalsIgnoreCase("yes");
    String temp = token[1];
    int i = Integer.parseInt(token[2])
    

    但是您可能需要创建一个数组或其他东西来存储用户执行的连续输入的值,否则这些变量将被用户的每个新输入覆盖。

    【讨论】:

    • 谢谢。但如果我有 3 行或多于 3 行。也就是说我得到了9个或更多的部分。如果我不知道具体有多少部分,我该如何编制索引?
    • 在每一行之后,你 split 输入 3 个部分并用这些值填写三个 ArrayList(只是一个例子,你可以使用任何你想要的列表)并继续这样做直到用户输入停止条件。您可以自己指定停止条件,就像用户只需按 Enter 键而无需任何输入。
    • 谢谢。我明白我的想法有什么问题。使用 while (inputFile.hasNext()) 循环,每次我只会得到 3 个部分。顺便说一下,Integer.ParseInt 应该是 Integer.parseInt。小写 p.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多