【问题标题】:Converting a String to a Char array and then returning only the even indexes of the array将 String 转换为 Char 数组,然后仅返回数组的偶数索引
【发布时间】:2018-05-08 20:18:24
【问题描述】:

所以我是 Java 新手,我想编写一个方法,将 String 转换为 Char 数组并返回这个 Char 数组,但只返回偶数索引中的字符。

我尝试了类似的东西

public char[] collectEvenChars(String str) {

        char [] chr = str.toCharArray();
        char [] temp;
        int k=0;

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

        {        
            if ( i % 2 == 0)

                k++;
            }
        }

然后以某种方式尝试使用 k 作为临时 char 数组的大小,但这不起作用。我也尝试过使用while循环

char[] collectEvenChars(String str){
    char [] chr = str.toCharArray();
    char [] temp = new char [chr.length];
    int i = 0;

    while (i<chr.length & i % 2 == 0){

        temp [i] = chr [i];



    }

    return temp;

并且有一个错误说“expected.length = 5, actual.length = 9”所以它必须对数组的返回做一些事情但是如果我初始化它我不能改变数组的大小开始并在循环中返回它不起作用,因为循环不会循环。我在这里很无助。如果它是无效的,这将很容易,但由于我必须返回一个数组,所以我非常无助。

【问题讨论】:

  • 你没有把“i”算进去。诠释 i = 0;将保持 0
  • 您还没有在第一个 sn-p 中发布不起作用的代码。第二个 sn-p 将无限运行,因为您从不增加 i。但是想想看。假设您有 200 万个字符。而且您只需要偶数索引处的字符。结果数组将有多少个字符?你真的需要数到 200 万才知道吗?

标签: java arrays loops


【解决方案1】:

我认为你把事情复杂化了——你可以只运行偶数索引:

char[] collectEvenChars(String str){
    char[] result = new char[(str.length() + 1) / 2];
    for (int i = 0; i < str.length(); i += 2) {
        result[i / 2] = str.charAt(i);
    }
    return result;
}

【讨论】:

    【解决方案2】:

    正如Mureinik 所说,你把事情复杂化了。这比你想象的要容易得多。无需创建两个新的 char 数组,只需使用字符串的长度作为条件并将迭代器更改为 i += 2。您可以使用String#charAt 作为索引,而不是构造一个新数组:

    public static char[] getEvenIndices(String str) {
    
        String newString = "";
        for(int i = 0; i < str.length(); i += 2) {
            newString += str.charAt(i);
        }
    
        return newString.toCharArray();
    }
    

    它适用于任何长度的字符串。我将数组打印为字符串:

    System.out.println(Arrays.toString(getEvenIndices("EvenIndicesOfThisString.")));
    

    得到了满意的结果:

    [E, e, I, d, c, s, f, h, s, t, i, g]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-31
      • 2012-09-03
      • 2016-05-28
      • 2011-06-08
      • 2012-11-04
      • 2011-08-13
      相关资源
      最近更新 更多