Java 将句子旋转n个单词

Java 将句子旋转n个单词,java,arrays,string,Java,Arrays,String,我正在尝试更新我以前编写的“旋转字符串”代码。目前,我的程序接受键盘输入的字符串和整数n。例如“abcdefg”,3。然后将字符串旋转n个字符,然后返回旋转后的字符串,即“efgabcd”。现在是棘手的部分。我试图更新这个,做基本相同的事情,但用一句话。所以输入应该是一个类似“这是一个例子”的数字和一个整数3。然后输出是“这是一个例子。”我假设将句子拆分成一个数组是我的最佳选择;然而,我对字符串的不熟悉不允许我知道如何去做这件事 import java.util.*; public class

我正在尝试更新我以前编写的“旋转字符串”代码。目前,我的程序接受键盘输入的字符串和整数n。例如“abcdefg”,3。然后将字符串旋转n个字符,然后返回旋转后的字符串,即“efgabcd”。现在是棘手的部分。我试图更新这个,做基本相同的事情,但用一句话。所以输入应该是一个类似“这是一个例子”的数字和一个整数3。然后输出是“这是一个例子。”我假设将句子拆分成一个数组是我的最佳选择;然而,我对字符串的不熟悉不允许我知道如何去做这件事

import java.util.*;
public class Rotate
{
  public static String rotate(String s, int num)
{
    int length = s.length();
    String a = s.substring(0,(length-num));
    String b = s.substring((length-num),length);
    String c = b + a;
    return c;
}


public static void main(String[] args)
{
  Scanner input = new Scanner(System.in);
  System.out.print("Enter a string:");
  String s = input.nextLine();
  System.out.print("Enter the number of characters that you want to rotated to right:");
  int n =input.nextInt();
  String t = rotate(s, n);
  System.out.println("The rotated string is "+ t);
 }
}

以下是一个示例解决方案:

int num = 3;
String str = "This is a test";
String[] strArr = str.split(" ");
int length = strArr.length;
String[] temp = Arrays.copyOfRange(strArr, length - num, length);
System.arraycopy(strArr, 0, strArr, num, length - num);
System.arraycopy(temp, 0, strArr, 0, temp.length);
str = String.join(" ", strArr);
str
现在包含“这是一个测试”

编辑:固定为向右旋转

事实上,我更喜欢@fergDEV的解决方案,但如果您使用Java 8,则可以对其进行一些清理:

int num = 3;
String str = "This is a test";
List<String> parts = Arrays.asList(str.split(" "));
Collections.rotate(parts, 3);
String.join(" ", parts);
int num=3;
String str=“这是一个测试”;
List parts=Arrays.asList(str.split(“”);
集合。旋转(第3部分);
字符串连接(“,部分);

您还可以使用两个for循环,这样在第一个for循环中,您可以从num(由用户提供)位置循环到字符串的末尾。在第二个循环中,从字符串开始循环到num的位置

要使上述逻辑正常工作,显然需要使用空格将字符串拆分为字符串数组。见下文:

public static String rotate(String s, int num)
    {
        //split the sentence by space
        String[] chunks = s.split(" ");
        //use StringBuilder to build rotated string 
        StringBuilder builder = new StringBuilder();

        //loop from position specified by user to end of array
        for(int i = num; i < chunks.length; i++) {
            builder.append(chunks[i] + " "); 
        }

        //loop from start of array to position specified by user
        for(int i = 0; i < num; i++) {
            builder.append(chunks[i] + " "); 
        }
        return builder.toString();
    }
乌提尔是你的朋友:p

public class Main {
    public static String rotateSetence(final String input, final int rotation) {
        final List<String> results = Arrays.asList(input.split(" "));
        Collections.rotate(results, rotation);

        final StringBuilder outputBuilder = new StringBuilder();

        for (int i = 0; i < results.size(); i++) {
            outputBuilder.append(results.get(i));
            if (i != results.size() - 1)
                outputBuilder.append(" ");
        }
        return outputBuilder.toString();
    }

    public static void main(String[] args) {
        final String inputString = "This is an example";
        final int sentenceRotation = 3;
        final String expectedResult = "is an example This";

        final String result = rotateSetence(inputString, sentenceRotation);
        System.out.println("result " + result);
        if (result.equals(expectedResult)) {
            System.out.println("Passed");
        } else {
            System.out.println("Failed");
        }
    }
}

使用Arrays.copyOf旋转是否要将句子中的单词拆分为空格?@cricket\u 007是。如果我知道如何将“thisaexample”拆分为数组:{“This”、“is”、“an”、“example”}这将是一个很大的帮助,我正在寻找答案,但是
String[]arr=“thisaexample”。拆分(“”)
@A.Stap熟悉javadoc。你知道这是一个字符串问题,你知道你必须拆分它。因此,打开字符串的javadoc,并查找“split”。或者谷歌“如何在Java中拆分字符串”。string.join()的用法很好!!
public class Main {
    public static String rotateSetence(final String input, final int rotation) {
        final List<String> results = Arrays.asList(input.split(" "));
        Collections.rotate(results, rotation);

        final StringBuilder outputBuilder = new StringBuilder();

        for (int i = 0; i < results.size(); i++) {
            outputBuilder.append(results.get(i));
            if (i != results.size() - 1)
                outputBuilder.append(" ");
        }
        return outputBuilder.toString();
    }

    public static void main(String[] args) {
        final String inputString = "This is an example";
        final int sentenceRotation = 3;
        final String expectedResult = "is an example This";

        final String result = rotateSetence(inputString, sentenceRotation);
        System.out.println("result " + result);
        if (result.equals(expectedResult)) {
            System.out.println("Passed");
        } else {
            System.out.println("Failed");
        }
    }
}
        final StringBuilder outputBuilder = new StringBuilder();

        for (int i = 0; i < results.size(); i++) {
            outputBuilder.append(results.get(i));
            if (i != results.size() - 1)
                outputBuilder.append(" ");
        }
        return outputBuilder.toString();
    return String.join(" ", results);