加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 将字符串中的字符向左移动

发布时间:2020-12-15 04:30:48 所属栏目:Java 来源:网络整理
导读:我是Stack Overflow的新手,我对一个一直在逃避我的编程课有一个实验室问题.问题要求我们将字符串s的元素向左移动k次.例如,如果输入是“Hello World”和3,则输出“lo WorldHel”).对于非常大的k值,它还必须相对有效地工作.这是我到目前为止: String cyclicLe
我是Stack Overflow的新手,我对一个一直在逃避我的编程课有一个实验室问题.问题要求我们将字符串s的元素向左移动k次.例如,如果输入是“Hello World”和3,则输出“lo WorldHel”).对于非常大的k值,它还必须相对有效地工作.这是我到目前为止:

String cyclicLeftShift(String s,int k){
   String result="";  

   for(int i=0;i<k;i++){
       result = s.substring(1,s.length() - 1) +s.charAt(0);

       s=result;
    }
    return s;
}

我的主要问题是原始字符串的最后一个字符不断被循环的后续迭代覆盖.我已经尝试了大量的排列,包括将整个事物转换为数组(这违反了原始问题中的效率限制).我觉得有一件小事我没有得到,我想知道是否有人可以给我一个正确方向的推动?

谢谢!

解决方法

你想要的是在位置k处拆分字符串并将两个部分再次合并在一起,但顺序相反.
主要问题是k可能大于或等于字符串的大小.所以你需要再次将k带入有效范围.

public static String cyclicLeftShift(String s,int k){
    k = k%s.length();
    return s.substring(k) + s.substring(0,k);
}

测试方法:

public static void main(String[] args)
{
    String test = "Hello World";
    for(int i = 0; i < test.length()*3; i++)
        System.out.println(cyclicLeftShift(test,i));
}

输出:

Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
 WorldHello
WorldHello 
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
 WorldHello
WorldHello 
orldHello W
rldHello Wo
ldHello Wor
dHello Worl
Hello World
ello WorldH
llo WorldHe
lo WorldHel
o WorldHell
 WorldHello
WorldHello 
orldHello W
rldHello Wo
ldHello Wor
dHello Worl

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读