簡體   English   中英

遍歷字符串並每次提取指定索引的子字符串

[英]Iterate through a string & extract substring for a specified index each time

我試圖從每個循環的一行中提取指定索引的子字符串。 這是字符串:

String allPins = "16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472
              16101702000000 376627817243
              16101702000001 326520924472"; 

它不是字符串類型的數組。 前14位數字是批號。 我想在每次遍歷字符串時提取第二個12位數字,即引腳號作為子字符串。

到目前為止,這是我的代碼:

for (int i = 0; i < allPins.length();i++){

      String str = allPins.substring((28*i)+15,(28*i)+28);
      String test  = str;     

      System.out.println(test);  
}

//我收到一個outOfBoundError。

//請幫我了解如何最好地提取子字符串。

正如其他人已經評論過的那樣,如果僅通過空格分隔字符串,則可能會更輕松。 在這種情況下,我將在\\s+上拆分,表示一個或多個空格字符。

String[] parts = allPins[i].split("\\s+");
for (int i=1; i < parts.length; i=i+2) {     // iterate and print odds only
    System.out.println(parts[i]);
}

如果您知道數據格式正確,即每個12位PIN始終以14位批號開頭(並且僅以該數字開頭),則此方法應該很好。

如果您有不規則的數據(您的問題並不暗示),則可能必須使用匹配器。

String str = allPins.substring((28*i)+15,(28*i)+28);

上一行是問題,當i值增加時,會導致超出范圍的錯誤,因為您要執行的操作比定義的字符串索引還要多。

更好的方法是按空格循環和分割並檢查...

String str = allPins.substring(allPins.split(" ")[1].toString());

我想在每次遍歷字符串時提取第二個12位數字,即引腳號作為子字符串。

您甚至不需要使用substring方法。 請參見以下示例:

  for (String num: allPins.split(" ")) {
     if(num.length() == 12)
         System.out.println(num);
  }

是的,您可以按照@Kevin Esche的建議嘗試,請嘗試根據空格分割字符串。 這應該對您有幫助。

嘗試使用以下代碼段:

for(int i = 0; i <allPins.length(); i ++){

  String[] str = allPins.split("\\s");
  String test  = str[1];     

  System.out.println(test);  

}

分割字符串將是一種更好的方法。

嘗試

String[] strArr = allPins.split(" ");

更多空白分割

現在,您有了一個字符串數組,其中批號和引腳號相鄰。 您可以通過循環訪問for來訪問它們。

還記得做

string.equals("checking string")

代替

string== string2

檢查是否相等。

String [] s1 = allPins.split(“”); System.out.println(s1.length);

for(int i = 0; i <s1.length / 2 -1; i ++){

String str = allPins.substring((28*i)+15,(28*i)+28);
String test  = str;     

System.out.println(test);  

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM