如何在java中将字符串从一个数组转换到另一个数组?

时间:2013-01-01 22:31:49

标签: java arrays string shift

我有两个数组,一个叫做单词,另一个叫做数据。我无法将字符串从数据转换为单词。到目前为止我有

    public String[] shiftRightX(String[] words, String[] data)
    {

        for(int i= words.length - 1; i>0; i--)
        {
            words[i]=words[i-1];
            for (int x = 0; x < data.length; x++)
            {
                words [0] = data[x];
            }
        }  
        return words;  
    }

例如,这应该导致:

    shiftRightX({"1", "2", "3"}, {"1", "2"}) → {"2", "1", "1"}
    shiftRightX({"1", "2", "3"}, {"1"}) → {"1", "1", "2"}
    shiftRightX({"1", "2"}, {"1", "2"}) → {"2", "1"}
但是,它最后会增加一个额外的时间。

3 个答案:

答案 0 :(得分:1)

更快的版本:

public String[] shiftRightX(String[] words, String[] data)
{
  if (data.length < words.length)
     System.arraycopy(words, 0, words, data.length, words.length - data.length);
  for (int i = Math.max(0, data.length - words.length); i < data.length; i++)
     words[data.length - i - 1] = data[i];
  return words;
}

答案 1 :(得分:0)

尝试交换循环:

public String[] shiftRightX(String[] words, String[] data)
{
    for (int x = 0; x < data.length; x++)
    {
        for(int i= words.length - 1; i>0; i--)
        {
            words[i]=words[i-1];
        } 
        words[0] = data[x];
    } 
    return words;  
}

但是这个算法可以改进。现在它的复杂度是O(n * m),但是如果将words数组中的移位元素转换为data.length位置而不是1,则可以将其改进为O(n + m)。但是你需要更加小心在这种情况下,因为您可以获得ArrayOutOfBoundException

答案 2 :(得分:0)

认为你要做的是这样的事情:

 public String[] shiftRightX(final String[] words, final String[] data){
        String[] result = new String[words.length];
        int i = 0;
        for(String str : data){
            result[i] = str;
            i++;
        }
        for(int j=0;i<words.length;j++){
            result[i] = words[j];
            i++;
        }
        return result;
    }