【问题标题】:Reverse String Array w/Method带方法的反向字符串数组
【发布时间】:2015-11-01 21:35:12
【问题描述】:

我需要使用一个静态方法,从另一个字符串数组反向返回一个字符串数组。因此,如果形参中的数组等于“hello”、“there”,则返回值必须是“olleh”、“ereht”。

我的想法是使用 charAt 命令,但它似乎不适用于数组。我不能使用内置方法一步解决这个问题。我也不知道如何移动到数组中的下一个元素。这是我的代码。

设置原始数组的main方法的一部分:

    String [] d = {"hey","hello"};
    System.out.println(Arrays.toString(count(d)));

我的方法:

    private static String [] count(String[] d)
{
    String[] reverse = new String [d.length];
    int l = d.length;
    for(int i = l -1; i >= 0; i--)
    {
        reverse = reverse + d.charAt(i);

    }
    return reverse;
}

【问题讨论】:

标签: java arrays string methods reverse


【解决方案1】:

所以你想反转数组中的每个字符串。

这是反转单个字符串的一种方法:

private static String reverseString(String s) {
    char[] orig = s.toCharArray();
    char[] reverse = new char[orig.length];
    for (int i = 0; i < orig.length; i++) {    
        reverse[i] = orig[orig.length - i - 1];
    }
    return new String(reverse);
}

借助上述方法,您可以创建这样的反转字符串数组:

private static String[] reverseMany(String[] strings) {
    String[] result = new String[strings.length];
    for (int j = 0; j < strings.length; ++j) {
        result[j] = reverseString(strings[j]);
    }
    return result;
}

【讨论】:

  • 为了澄清:我需要将实际元素保留在同一个地方。我需要反转元素的内容并将其返回。
  • 有没有一种方法可以做到这一点?我不相信我的指示会允许我这样做。我知道在 Matlab 中有匿名函数。 Java中是否有类似的东西允许这样做?
  • @frillybob 有办法做到这一点,但理智的程序员不会这样做:Single responsibility principle
  • @janos @Tom 关于第一种方法,我还有一个问题。 reverseString(String s) 是如何工作的?我没有看到在任何地方声明 String 。我想我不明白result[j] = reverseString(d[j]); 是如何传递给private static String reverseString(String s)
  • @frillybob string s 在方法参数列表中声明。我不明白你的第二个问题
【解决方案2】:

您可以使用StringBuilder#reverse 来反转字符串。

以下代码将反转给定数组中的所有字符串:

private static String [] count(String[] d)
{
    String[] reverse = new String [d.length];
    for(int i = 0; i < d.length; i++)
    {
        reverse[i] = new StringBuilder(d[i]).reverse().toString();
    }
    return reverse;
}    

使用 Java 8 流的更优雅的单行解决方案是:

private static String [] count(String[] d)
{
    return Arrays.stream(d).map(s -> new StringBuilder(s).reverse().toString()).toArray(String[]::new);
}    

【讨论】:

    【解决方案3】:

    查看我使用 PHP 创建的这段代码,它非常简单:

    // the array you want to reverse
    $array = [13, 4, 5, 6, 40];
    // get the size of the array
    $arrayLength = count($array);
    // get the index of the middle of the array
    $index = intval($arrayLength / 2); 
    for ($i=0; $i < $index; $i++) {
        // we store the value in a temp variable
        $tmp = $array[$i];
        // and finaly we switch values
        $array[$i] = $array[$arrayLength - $i - 1];
        $array[$arrayLength - $i - 1] = $tmp;
    }
    

    【讨论】:

    • 我不确定我能否遵循该代码。我假设 $ 字符表示一个变量。话虽如此,我不知道 intval 是什么以及它在 java 中的类似方法。
    • 是的 $ 名称用于变量,intval 的等价物只是转换为 int ,可以使用 (int) a / b 完成
    • 所以在 java 中:index = (a/b) 和 PHP 将是:$index = invtal(a/b)
    • @frillybob nop,实际上它是 index = (int)(a/b) 来获取数字的整数部分,以防数组的长度是奇数
    • 你指的是Java还是PHP代码。 AFAIK index = (int)(a/b) 不是有效的 java 语法。我也将它转换为java,但我得到[40, 6, 5, 6, 40]作为字符串数组String [] a = {"13","4","5","6","40"};的输出@
    【解决方案4】:

    要在android中使用这个库编译'org.apache.commons:commons-lang3:3.5'

    使用 [Commons.Lang][1],您可以简单地使用

    ArrayUtils.reverse(int[] array)
    

    【讨论】:

      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 2018-09-15
      相关资源
      最近更新 更多