2015-12-10 3 views
2

Я пытаюсь обновить код, который я ранее написал, чтобы «повернуть строку». В настоящее время моя программа принимает строку из ввода с клавиатуры и целое число n. ех. «abcdefg», 3. Затем поворачивает строку на n символов перед возвратом повернутой строки, то есть «efgabcd». Теперь за сложную часть. Я пытаюсь обновить это, чтобы сделать по существу то же самое, но с предложением. Таким образом, входные данные были бы чем-то вроде «Это пример» и целое число 3. тогда выход был бы «примером этого». Я предполагаю, что разделение предложения на массив будет моим лучшим выбором; однако мое незнание со строками не позволяет мне знать, как это сделать.Вращение предложения по n словам

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); 
} 
} 
+0

использования Arrays.copyOf вращать – Raf

+0

Вы хотите разделить слова предложения только на пространствах? –

+0

@ cricket_007 да. если бы я знал, как расколоть «Это пример» в массив: {«this», «is», «an», «example»} было бы большой помощью –

ответ

2

Вот пример решения:

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 теперь содержит "тест Это".

EDIT: исправлено для поворота вправо.

Я предпочитаю @ решения 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); 
+0

Приятное использование String.join() !! – fergdev

0

Вы также можете использовать два для петель, таким образом, что в первом для петля зацикливается от позиции 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(); 
    } 

вход и выход показан ниже:

Enter a string:My name is Raf and I am super super fun guy trust me 
Enter the number of characters that you want to rotated to right:2 
The rotated string is : is Raf and I am super super fun guy trust me My name 
1

В Collections Utils ваш друг: 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"); 
     } 
    } 
} 

EDIT

код строитель может быть заменен string.join ... благодаря @shmosel.

 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); 
Смежные вопросы