Java解析字符串[重复]

Posted

技术标签:

【中文标题】Java解析字符串[重复]【英文标题】:Java Parsing strings [duplicate] 【发布时间】:2018-02-08 02:09:31 【问题描述】:

我得到了.txt文件,其中包含不同格式的国籍和电话号码,所有这些都用单引号括起来,还包含空行(''):

''   
'French'   
'1-500'   
'0345134123'   
''   
''   
'German'  
etc  

readLine() 的帮助下解析后,我得到了arr[0] 的每一行。 我需要将行放入不同的数组中:将带有“国籍”的行放入一个数组中,将带有“电话号码”的行放入另一个数组中。 我试过这个

if(!arr[0].equals("''"))
   String[] arr1 = arr[0].split("'");
   if(!arr1[1].matches("[0-9]+)")
     nations[n] = arr1[1];
     n++;
   
   else 
     phone_numbers[p] = arr1[1];
     p++;
   

当然没用

【问题讨论】:

“当然没用”。为什么? 如果每个项目的行数是固定的,那么我看不出有什么理由不能迭代并将每行转储到相应的数组中。 你的文本文件格式是这样的吗:姓名国籍地址电话姓名国籍地址电话等 How much research effort is expected of Stack Overflow users? 答案,“很多。一个荒谬的数量。超过你认为你的能力。在你到达你的绳索的尽头和没有的痛苦之后答案超过了发布您的问题所带来的大量耻辱,那时您可以继续提问。因为到那时,您将完成任何必要的研究,使其成为一个值得提出的好问题!”跨度> 【参考方案1】:

在你的问题中你说你想要

将行放入不同的数组中:带有“国籍”的行放入一个数组中,带有“电话号码”的行放入另一个数组中。

public static void main(String[] args) 
    try
      File file = new File("path\\to\\yourfile");
      FileReader fr = new FileReader(file);
      BufferedReader br = new BufferedReader(fr);
      String line = "";
      String nationalities = "";
      String phones = "";
      while((line = br.readLine()) != null)
        String[] s = line.split("'");
        if(s.length > 0)
          if(s[1].matches("[a-zA-Z]+"))
          // nationalities
          nationalities += (nationalities.isEmpty()) ? s[1] : " " + s[1];
          else
          // line with phone numbers
          phones += (phones.isEmpty()) ? s[1] : " " + s[1];
          
        
      
      String[] nationArr = nationalities.split(" ");
      String[] phoneArr = phones.split(" ");
      for(String val : nationArr)
        System.out.println(val);
      
      System.out.println("------------");
      for(String val : phoneArr)
        System.out.println(val);
      
    catch(IOException e)
      System.out.println("Error");
    

  

我用这个文本文件测试过

''
'French'
'1-500'
'0345134123'
''
''
'Japan'
'2-200'
'08078933444'
''
''
''
'Germany'
'2-300'
'00078933444'
''

你会得到两个数组,nationality[nationArr] 和 line with phone[phoneArr]。 这是答案。

French
Japan
Germany
------------
1-500
0345134123
2-200
08078933444
2-300
00078933444

【讨论】:

【参考方案2】:

我建议实施某种系统来区分线条的类型。您可以将“n”放在国籍行的开头,然后在您的代码中检测到它......或者如果您知道这些行的确切顺序,例如国籍,号码,国籍,号码...您可以轻松地将这些行分开,例如lineNumber%numOfLineTypes==0 会给你第一种类型的线......

【讨论】:

以上是关于Java解析字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript无法从Java解析用Gson序列化的字符串[重复]

如何在Java(Android)中解析包含XML的字符串[重复]

C# 解析字符串xml

如何使用 Java Regex 查找字符串中的所有重复字符序列?

在Java [重复]中的多个空格上分割字符串

Java字符串池(String Pool)深度解析