【问题标题】:How to split String on two different chars如何在两个不同的字符上拆分字符串
【发布时间】:2017-12-09 16:13:01
【问题描述】:

我已经在字符“-”上拆分了字符串 value2,并将其值保存在一个新数组中,如您所见。现在我想在“,”上再次分隔字符串,并将其再次保存在一个新数组中,但它不起作用。它总是将第二个名字与数字分开。并覆盖第一个。所以我进入了第一个数组 [0]: Peter,2 和 [1]: Leo,1 在第二个数组中,就在 [0] Leo 和 [1] 1 上。

我知道我的 for 循环是错误的,但我不知道如何修复它。

    final int value = 2;
    final String value2 = "Peter,2-Leo,1";


    String[] splittedStringOne = new String[value];
    String[] splittedStringTwo = new String[splittedStringOne.length*2];


    splittedStringOne = value2.split("-");



    for(int i=0;i<splittedStringOne.length;i++) {
        splittedStringTwo=splittedStringOne[i].split(",");

【问题讨论】:

  • 你试过二维数组吗?
  • 您的预期结果是什么?
  • 我建议先将所有“-”替换为“,”,然后用“,”分割。这样,您将只拆分一次并获得所需的数组。
  • 是的,在我把第二个数组的值放在右边之后,我想做一个二维数组。
  • 有时调试有助于更深入地了解问题

标签: java arrays split


【解决方案1】:

假设您的 splittedStringOne 在索引 [0] 和 [1] 处包含正确的值,在您的 for 循环中,您只会覆盖 splittedStringTwo 的内容。 由于 String.split(',') 返回一个数组,你还应该将 splittedStringTwo 设为二维:

    String[][] splittedStringTwo = new String[splitedStringOne.length][2];

这应该适用于 for 循环:

    for(int i=0;i<splittedStringOne.length;i++) {
    splittedStringTwo[i]  = splittedStringOne[i].split(",");
    }

请注意,我将 [i] 添加到 splittedStringTwo

【讨论】:

    【解决方案2】:

    splittedStringTwo 必须是二维的。

    String[][] splittedStringTwo = new String[splitedStringOne.length][2];
    
    for(int i =0; i < splittedStringTwo.length; i++)
        splittedStringTwo[i] = splittedStringOne[i].split(",");
    

    或者如果你不想要二维数组:

    String[] splittedStringTwo = new String[splittedStringOne.length*2];
    
    for(int i = 0; i < splittedStringTwo.length; i+=2){
        String[] split = splittedStringOne[i].split(",");
        splittedStringTwo[i] = split[0];
        splittedStringTwo[i+1] = split[1];
    }
    

    编辑: 在 cmets 中提问。试试这个,它没有经过测试,但它应该可以工作

    String[][] splittedStringTwo = new String[splittedStringOne.length*2][2];
    
    for(int i = 0; i < splittedStringTwo.length; i+=2){
        String[] split1 = splittedStringOne[i].split(",");
        String[] split2 = splittedStringOne[i+1].split(",");
        splittedStringTwo[i][0] = split1[0] 
        splittedStringTwo[i][1] = split2[0];
        splittedStringTwo[i+1][0] = split1[1]
        splittedStringTwo[i+1][1] = split2[1];
    }
    

    【讨论】:

    • 但是我怎样才能填满我所拥有的 splittedStringTwo 数组:{{Peter,Leo},{2,1}}
    • 什么意思?
    • 我希望在第二维中将所有名称分开,并将所有数字分开。输入字符串为:Peter,2-Leo,1。然后我分裂了两次,最后我想要在二维数组 {{Peter,Leo},{2,1}} 中。不是 {{Peter,2},{Leo,1}}。
    • Array constants can only be used in initializers 是什么意思?如果我想做splittedStringTwo[i] = {split1[0], split2[0]}; splittedStringTwo[i+1] = {split1[1], split2[1]},这就是错误
    • 好的,花括号在 java 中的分配中是不可能的。现在它应该可以工作了
    【解决方案3】:

    可以使用arraycopy将splittedStringOne[i].split(",");的结果复制到splittedStringTwo的正确位置

    喜欢:

    public class ArrayCopyTest {
    
        @Test public void test() {
            final String value2 = "Peter,2-Leo,1";
    
            String[] splittedStringOne = value2.split("-");
            String[] splittedStringTwo = new String[splittedStringOne.length*2];
    
            for(int i=0;i<splittedStringOne.length;i++) {
                // splittedStringTwo = splittedStringOne[i].split(",");
                System.arraycopy(splittedStringOne[i].split(","), 0, splittedStringTwo, i * 2, 2);
            }
            Assert.assertArrayEquals(splittedStringTwo, new String[]{"Peter", "2", "Leo", "1"});
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2023-04-09
      • 2018-01-06
      相关资源
      最近更新 更多