Как перевернуть каждое слово в строке на основе заданного ввода di git? - PullRequest
2 голосов
/ 12 июля 2020

Ниже приведены правила, которым должна следовать программа:

  1. Каждое слово в string должно быть разделено на n букв каждое и перевернуть их с самого начала
  2. Перевернуть должны только те слова, длина которых равна или больше n

Например, если string = "law of attraction" и введите n = 3. Здесь длина из меньше, чем n, поэтому не следует менять местами, но закон и притяжение имеют длину больше или равную 3 таким образом, необходимо поменять местами

law as wal и attraction as ttacaroitn

Окончательный вывод: wal of ttacaroitn

В моем данном коде я могу только возможность перевернуть строку, но не слова, основанные на вводе di git. Не понимаю.

    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();
    System.out.println("Enter String: "+str);
    
    Scanner sc1 = new Scanner(System.in);
    int Digit = sc.nextInt();
    
    int count = str.split("\\s+").length;
    System.out.println("No.of words: "+count);
    System.out.println("Given string: "+str);
    if(Digit<=count) {
        String s[] = str.split(" ");
        String ans = "";
        for (String part : str.split(" ")) {
            System.out.print(new StringBuilder(part).reverse().toString());
            System.out.print(" ");
        }
    }   
    else {
        System.out.println("Your input Digit is Greater than count of words.");
    }

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Вы используете if(Digit<=count), что означает, что если n меньше количества слов, тогда переверните все слова в l oop, что является проблемой.

   if(Digit<=count) {
        String s[] = str.split(" ");
        String ans = "";
        for (String part : str.split(" ")) {
            System.out.print(new StringBuilder(part).reverse().toString());
            System.out.print(" ");
        }
    }

Вы должны проверить длину каждого слова после разделения внутри l oop и делать в обратном порядке, если n больше или равно n.

    String s[] = str.split(" ");
    for (String part : s) {
        // here to check
        if(part.size() >= Digit){
            part = new StringBuilder(part).reverse().toString();
        }
        System.out.print(part);
        System.out.print(" ");
    }
1 голос
/ 12 июля 2020

Метод reverseSubString разбивает слово после каждых n символов. Затем он переворачивается.

public static void main(String[] args){
  String line = "law of attraction";
  int n = 3;
  String[] words = line.split(" ");
  for(String word: words){
    if(word.length()>=n){
      System.out.print(reverseSubString(word, n)+" ");
    } else {
      System.out.print(word + " ");
    }
  }
}

public static String reverseSubString(String s, int n) {
  String ans = "";
  String[] substrings = s.split("(?<=\\G.{"+n+"})");
  for(String substring : substrings){
    if(substring.length()==n)
       ans += new StringBuffer(substring).reverse().toString();
    else
       ans += substring;
  }
  return ans;
}

ВЫХОД

wal of ttacaroitn

...