如何旋转一个字符串,一次一个字符?

时间:2019-07-11 18:09:57

标签: java

我无法完成此模式的逻辑,并且尝试了各种if-else语句

这是我正在执行的代码:

import java.util.Scanner;

public class String_pattern_01 {



public static void main(String[] args) {

        Scanner sc= new Scanner(System.in);
        System.out.println("Enter the character in continuation to get the pattern");
        String s=sc.next();
        int d=s.length();
        String s2[]=s.split("");
        for(int i=0;i<=s.length();i++)
        {    
            String x= s.substring(i, d);

            if(i>=1&i<d)
            {
                for(i=1;i<d;i++)
                {String y=x+x.substring(0,i-1);
                System.out.println(y);}
            }
            else
            {

                System.out.println(x);
            }

        }

    }

}

2 个答案:

答案 0 :(得分:1)

public static void main(String[] args) {
  String input = "abcde";

  List<String> asList = input.chars()
    .mapToObj(e -> (char) e)
    .map(String::valueOf)
    .collect(Collectors.toList());

  for (int i = 0; i <= input.length(); i++) {
    System.out.println(String.join("", asList));
    Collections.rotate(asList, -1);
  }
}
  1. 将输入String转换为List,其中列表的每个元素都是单个字符
  2. 将列表加入一个String并打印
  3. 向左旋转List并重复

这是(明确的)执行方法,将String转换为List的仪式比实际工作要大,但一旦得到,就很清楚这段代码的作用

答案 1 :(得分:1)

可以简单地将代码简化为一个for循环:

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the character in continuation to get the pattern");
    String s = sc.next();

    int d = s.length();
    for(int i = 0; i < d; i++)
    {    
        s = s.substring(1, d) + s.charAt(0);
        System.out.println(s);
    }

示例运行:,输入abcde,将输出:

bcdea
cdeab
deabc
eabcd
abcde

循环通过使用String获取String的第一个字符,然后将其附加到charAt(0)的末尾(跳过该循环)来创建新的substring第一个字符。