как разбить строку по позиции в Java - PullRequest
7 голосов
/ 26 октября 2010

Я нигде не нашел ответа .. Если у меня есть: String s = "How are you"? Как я могу разбить это на две строки, так что первая строка, содержащая от 0..s.length()/2 и вторая строка из s.length()/2+1..s.length()?

Спасибо!

Ответы [ 7 ]

22 голосов
/ 26 октября 2010

Это должно сделать:

String s = "How are you?";
String first = s.substring(0, s.length() / 2);  // gives "How ar"
String second = s.substring(s.length() / 2);    // gives "e you?"
  • String.substring(int i) с одним аргументом возвращает подстроку, начинающуюся в позиции i

  • String.substring(int i, int j) с двумя аргументами возвращает подстроку, начинающуюся с i и заканчивающуюся j-1.

(обратите внимание, что если длинаСтрока нечетная, second будет иметь на один символ больше, чем first из-за округления в целочисленном делении.)

5 голосов
/ 26 октября 2010
String s0 = "How are you?";
String s1 = s0.subString(0, s0.length() / 2);
String s2 = s0.subString(s0.length() / 2);

Пока s0 не равно нулю.

EDIT

Это будет работать для строк нечетной длины, поскольку вы не добавляете 1 к какому-либо индексу. Удивительно, но он работает даже на строке нулевой длины "".

5 голосов
/ 26 октября 2010

Вы можете использовать 'подстроку (начало, конец)', но, конечно, проверьте, не является ли строка нулевой:

String first = s.substring(0, s.length() / 2);
String second = s.substring(s.length() / 2);

А вы ожидаете строку с нечетной длиной? в этом случае вы должны добавить логику для правильной обработки этого случая.

4 голосов
/ 26 октября 2010

Вот метод, который разбивает строку на n элементов по длине.(Если длина строки не может быть точно разделена на n , последний элемент будет короче.)

public static String[] splitInEqualParts(final String s, final int n){
    if(s == null){
        return null;
    }
    final int strlen = s.length();
    if(strlen < n){
        // this could be handled differently
        throw new IllegalArgumentException("String too short");
    }
    final String[] arr = new String[n];
    final int tokensize = strlen / n + (strlen % n == 0 ? 0 : 1);
    for(int i = 0; i < n; i++){
        arr[i] =
            s.substring(i * tokensize,
                Math.min((i + 1) * tokensize, strlen));
    }
    return arr;
}

Тестовый код:

/**
 * Didn't use Arrays.toString() because I wanted to have quotes.
 */
private static void printArray(final String[] arr){
    System.out.print("[");
    boolean first = true;
    for(final String item : arr){
        if(first) first = false;
        else System.out.print(", ");
        System.out.print("'" + item + "'");
    }
    System.out.println("]");
}

public static void main(final String[] args){

    printArray(splitInEqualParts("Hound dog", 2));
    printArray(splitInEqualParts("Love me tender", 3));
    printArray(splitInEqualParts("Jailhouse Rock", 4));

}

Вывод:

['Hound', 'dog']
['Love', 'me te', 'nder']
['Jail', 'hous', 'e Ro', 'ck']

2 голосов
/ 26 октября 2010

Я нигде не нашел ответа.

Первое, на что вы всегда должны обращать внимание, это javadocs для рассматриваемого класса: в данном случае java.lang.String.Javadocs

  • можно просматривать в Интернете на веб-сайте Oracle (например, http://download.oracle.com/javase/6/docs/api/),
  • включены в любой дистрибутив Sun / Oracle Java SDK, вероятно,
  • для просмотра в Java IDE и
  • , а также для поиска в Google.
2 голосов
/ 26 октября 2010

Используйте String.substring (int) и String.substring (int, int) метод.

int cutPos = s.length()/2;
String s1 = s.substring(0, cutPos);
String s2 = s.substring(cutPos, s.length()); //which is essentially the same as
//String s2 = s.substring(cutPos);
0 голосов
/ 25 декабря 2018
public int solution(final String S, final int K) {
    int splitCount = -1;
    final int count = (int) Stream.of(S.split(" ")).filter(v -> v.length() > K).count();
    if (count > 0) {
        return splitCount;
    }

    final List<String> words = Stream.of(S.split(" ")).collect(Collectors.toList());
    final List<String> subStrings = new ArrayList<>();
    int counter = 0;
    for (final String word : words) {
        final StringJoiner sj = new StringJoiner(" ");
        if (subStrings.size() > 0) {
            final String oldString = subStrings.get(counter);
            if (oldString.length() + word.length() <= K - 1) {
                subStrings.set(counter, sj.add(oldString).add(word).toString());
            } else {
                counter++;
                subStrings.add(counter, sj.add(word).toString());
            }
        } else {
            subStrings.add(sj.add(word).toString());
        }
    }

    subStrings.forEach(
            v -> {
                System.out.printf("[%s] and length %d\n", v, v.length());
            }
    );
    splitCount = subStrings.size();
    return splitCount;
}

public static void main (конечная строка [] args) {

    final MessageSolution messageSolution = new MessageSolution();
    final String message = "SMSas5 ABC DECF HIJK1566 SMS POP SUV XMXS MSMS";
    final int maxSize = 11;
    System.out.println(messageSolution.solution(message, maxSize));

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...