【问题标题】:Java android - How to split string data with empty data inside of itJava android - 如何使用其中的空数据拆分字符串数据
【发布时间】:2018-03-25 01:49:53
【问题描述】:

我有一个数据字符串名称 stringSplit 我想分成 5 个部分。

我用它来分割字符串:

String[] pisah = stringSplit.split(",", -1);
for (int i=0;i< pisah.length;i++) {
   String hasil1 = pisah[0];
   String hasil2 = pisah[1];
   String hasil3 = pisah[2];
   String hasil4 = pisah[3];
   String hasil5 = pisah[4];
}

当 stringSplit 中的值有 5 个数据时(例如:“data1,data2,data3,data4,data5”),代码正常工作。但是当 stringSplit 中只有一个、两个或三个数据时,会捕获一个异常:

(f.e: java.lang.ArrayIndexOutOfBoundsException: length=4; index=4).

我的问题是如何处理空字符串?所以即使数据只有一个、两个或三个数据,stringSplit 仍然可以拆分。

我尝试将限制添加到 -1,这是我从另一篇文章中获得的解决方案,但仍然不适合我。

已编辑:

我差点忘了,结果字符串 (hasil1 - hasil5) 将用于编辑文本。

fe:editText1.setText(hasil1);

和其他人。

【问题讨论】:

  • 您忘记了pisah[3] 并添加了pisah[5]
  • 哦,我忘了。但在我的真实代码中,索引是从 0 - 4

标签: java android string split


【解决方案1】:

一种可能的解决方案是检查您要查找的索引是否小于数组的长度。如果该索引小于数组的大小,则它肯定存在。

for (int i=0;i< pisah.length;i++) {
  if(0 < pisah.length)
     String hasil1 = pisah[0];
  if(1 < pisah.length)
     String hasil2 = pisah[1];
  //similarly for all other idexes that you want the value for.
}

【讨论】:

    【解决方案2】:

    您已经硬编码了可以拥有的 EditText 字段的数量!如果需求发生变化,您必须添加另一个字段怎么办?这需要你在很多地方添加“editText6”和“hasil6”。该代码对规范的更改并不灵活。

    这就是我会做的。

    1. 创建一个 EditText 列表,例如 textList
    2. 同时遍历 pisah 数组和 textist 并将 pisah 中索引 i 处的字符串添加到索引 i 处的 EditText 对象 文本列表。

    这样,如果只有 3 个数据值,您将自动处理仅填充 3 个 EditText 对象。

    这是代码:

    List<EditText> textList;
    String[] pisah = stringSplit.split(",", -1);
    for (int i=0;i< pisah.length;i++) {
               textList.get(i).setTest(pisah[i]);
    }
    

    【讨论】:

    • Ok tq 回答您的问题,但您能否解释一下如何获取 3 个 String 类型的数据但未设置为 EditText,因为我想用作查询参数。如果您能帮助我,我将不胜感激
    【解决方案3】:

    使用此代码:

     String res[] = new String[5];
    
    String[] pisah = stringSplit.split(",");
    
    for (int i=0;i< pisah.length && i < res.length;i++) {
      res[i] = pisah[i];
    }
    
    if(res[0] != null )
      //.......... res[0] valid 
    
    if(res[1] != null )
      //.......... res[1] valid 
    
    if(res[2] != null )
      //.......... res[2] valid 
    
    if(res[3] != null )
      //.......... res[3] valid 
    
    if(res[4] != null )
      //.......... res[4] valid 
    

    【讨论】:

      【解决方案4】:

      问题来了,

      for (int i=0;i< pisah.length;i++) {
         String hasil1 = pisah[0];
         String hasil2 = pisah[1];
         String hasil3 = pisah[2];
         String hasil4 = pisah[4];
         String hasil5 = pisah[5];
      }
      

      但是它会遍历列表并在每次循环时从 0-5 获取列表中的值,所以你应该做的是这样的

      for(int i = 0; i < 6; i++){
          if(i >= pisah.length()) break;  
          String hasilI = pisah[i];
      }
      

      这会遍历列表 6 次,然后如果列表的大小

      【讨论】:

      • 抱歉,请使用 >= 而不是 >
      猜你喜欢
      • 1970-01-01
      • 2019-07-07
      • 2019-11-16
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      相关资源
      最近更新 更多