перемещение символов в текстовой строке на заданное количество позиций


Я новичок в программировании и пытаюсь написать программу, которая перемещает символы в текстовой строке на определенное количество позиций.

Программа должна включать метод, входными данными которого будут текстовая строка (type String) и количество позиций (type int). Выводом будет строка со смещенными символами.

Например, перемещение на 4 позиции:

rabbit eats a carrot
it eats a carrotrabb

Теперь у меня есть этот частичный код. Я могу стереть первые символы, но я не знаю, как положить их в конец из этого текста. Как я могу это сделать?

public static void main(String[] args) {
    System.out.println("enter the text: ");
    Scanner cti = new Scanner(System.in);     
    String a = cti.nextLine();
    System.out.println("enter number of positions= ");
    int b = cti.nextInt();
    char firstLetter = a.charAt(0);
    b--;
    a = a.substring(b); 
    String m = a + firstLetter ;
    System.out.println("now it is "+ m);
}
5 3

5 ответов:

import java.util.*;
public class JavaApplication5 {
    public static void main(String[] args) {
        System.out.println("enter the text: ");
       Scanner cti = new Scanner(System.in);     
       String a = cti.nextLine();
        System.out.println("enter number of positions= ");
        int b = cti.nextInt();
       String firstPart = a.substring(0,b);   // line 1
       b--;
       a = a.substring(b); 
       String m = a + firstPart ;             // line 2
        System.out.println("now it is "+ m);
    }
    
}

См. вышеизложенные изменения в инструкции, помеченной строкой 1 и строкой 2 комментария.

В строке 1 мы получаем первую часть строки, а в строке 2 Добавляем в конце вторую часть строки.

public String foo(String s, int n) {
    String s2 = s.substring(0, n);
    s = s.substring(n) + s2;
    return s;
}

Вы можете поставить несколько проверок на это, например, null string или n меньше s. length () и т. д.

Если вы используете регулярное выражение, это всего одна строка:

return str.replaceAll("^(.{" + n + "})(.*)", "$2$1");

Для вычисления числа сдвигов лучше использовать оператор модуля. Когда начальное число сдвига больше длины строки. Проверьте это:

public String shift(String string,int n){
    int nshift = string.length() < n ? n%string.length() : n ;
    String a = string.substring(0,nshift);
    return string.substring(nshift) + a ;
}

Еще одна версия. Вся работа по существу сделана в 1 строке здесь:

String result = new StringBuilder(a).delete(0, b).append(a.substring(0,b)).toString();

В любом случае, полный код:

import java.util.*;
public class ShiftLetters {
    public static void main(String[] args) {
        System.out.print("enter the text: ");
        Scanner cti = new Scanner(System.in);     
        String a = cti.nextLine();
        System.out.print("Enter number of positions: ");
        int b = cti.nextInt();

        String result = new StringBuilder(a).delete(0, b).append(a.substring(0,b)).toString();

        System.out.println(result);
    }    
}

Кроме того, вы можете быть более точным со своим стилем отступов, чтобы улучшить читаемость.