使用java将一组字符转换为不同的字符串数组

时间:2014-05-15 10:01:27

标签: java android arrays file

我正在尝试从文件中读取数据。我有以下代码。

  public void ReadFile()
  {
      File sdcard = android.os.Environment.getExternalStorageDirectory();  
      File directory = new File(sdcard.getAbsolutePath()+ "/MyDirectory");  
      File file = new File(directory,"textfile1.txt");  
      try (FileInputStream fis = new FileInputStream(file)) {
          char stringComma = new Character(',');
          System.out.println("Total file size to read (in bytes) : "+ fis.available());
          int content;
          while ((content = fis.read()) != -1) {
              // convert to char and display it
              Log.d(TAG, "reading a file");
              System.out.print((char) content);
          }
      } catch (IOException e) {
          e.printStackTrace();
      }
  }

我的文件格式如下[textfile1.txt]

  [12],84359768069 //some numbers
  [34],56845745740
  [44],36344679992
  [99],46378467467

当我正在阅读此文件时,每个角色都会一次阅读。我想拆分它并存储在不同的字符串数组中,如

  str1 = [12]
  str2 = 84359768069

我怎么能做到这一点?

2 个答案:

答案 0 :(得分:3)

您目前正在阅读字节,因为您正在使用InputStream。这是第一件需要解决的问题 - 您应该使用Reader来处理文本数据。最好的方法是将InputStream包裹在InputStreamReader

接下来,听起来你想一次只读一个,而不是一次只读一个字符。最简单的方法是使用BufferedReader包裹InputStreamReader

(如果您使用的是Java 7+,使用Files.newBufferedReader可以很好地实现所有这些 - 您只需要提供PathCharset。直到Android支持,你需要手动进行包装。但它并不太痛苦。)

您一次只读一行,然后需要用逗号分隔该行 - 请查看使用String.split。然后我建议你创建一个类来存储这两个单独的值。因此,每一行都将转换为您班级的一个实例。

最后,创建一个List<YourCustomClass>并在阅读文件时添加它。

我们已经概述了如何实现每一步 - 希望足够的细节让你能够继续前进,但不要用足够的食物来阻碍你实际学习经验。

答案 1 :(得分:-1)

一个简单的解决方案是解析readed字符:

public void ReadFile()
{
  File sdcard = android.os.Environment.getExternalStorageDirectory();  
  File directory = new File(sdcard.getAbsolutePath()+ "/MyDirectory");  
  File file = new File(directory,"textfile1.txt");  
  try (FileInputStream fis = new FileInputStream(file)) {
      char stringComma = new Character(',');
      System.out.println("Total file size to read (in bytes) : "+ fis.available());
      int content;
      String str1="";
      String str2 = "";
      boolean commaFound=false;
      while ((content = fis.read()) != -1) {
          // convert to char and display it
          Log.d(TAG, "reading a file");
          if ((char)content==',')
          {
             commaFound = true;
          }
          else if ((char)content=="\n")
          {
              System.out.printlnt("str1="+str1+"\nstr2="+str2);
              commaFound = false;
              str1 = "";
              str2 = "";
          }
          else
          {
             if (commaFound)
             {
               str2 += (char)content;
             }
             else
             {
               str1 += (char)content;
             }
          }
          System.out.print((char) content);
      }
  } catch (IOException e) {
      e.printStackTrace();
  }
}