2011-01-24 5 views
3

У меня есть эта строка 8S8Q4D1SKCQC2C4S6H4C6DJS2S1C6CРазбивает строку на несколько две строки символов

Как я могу разделить эту строку на подстроки, которые состоят из 2-х символов в подстроке? Я смущен, потому что я не могу найти разделитель, чтобы разделить их.

ответ

13
System.out.println(Arrays.toString(
    "8S8Q4D1SKCQC2C4S6H4C6DJS2S1C6C".split("(?<=\\G.{2})") 
)); 
+0

Будет ли это не усекать последний символ строк с нечетной длиной? Кроме того, использование регулярных выражений для простых задач обычно делает код менее читаемым, так как он просто добавляет вторую проблему. Мне нравится думать о программистах, которые будут поддерживать код после меня. – nybbler

+0

@nybbler Просто протестировал его. Он не усекает. У последнего персонажа все еще есть два символа, предшествующие ему. Он также работает для одного персонажа. Это может быть багом =/ – KitsuneYMG

+0

Когда он делает то, что вы хотите, это «особенность», а не ошибка;) – nybbler

0

Вам нужно будет сделать подобный раскол самостоятельно. Вы можете использовать что-то вроде подстроки следующим образом:

public String[] customSplit(String src, int size) { 
    Vector<String> vec = new Vector<String>(); 

    for(int i = 0; i < src.length(); i += size) { 
     vec.add(src.substring(i, (i+size > src.length()) ? src.length() : i+size); 
    } 

    return vec.toArray(); 
} 
+0

почему бы не использовать фактический раскол функции? Вот почему он есть. – KitsuneYMG

+0

Ну один * возможно * причина в том, что 'split' с gnarly regex * может * быть значительно медленнее. Код OTOH @ nybbler будет быстрее, если (s) он использовал 'String []' вместо 'Vector'. Так что +1 за этот ответ от меня. –

+0

@ Stephen C - достаточно справедливо. Я не привык работать с массивами на языке, который позволяет динамическим размерам массива – nybbler

-1
for (int i = 0; i < a[2].Length; i++) 
{ 
    string ss = (8S8Q4D1SKCQC2C4S6H4C6DJS2S1C6C).Substring(i, 2); 
    Console.Write(ss); 
    i++; 
} 
Смежные вопросы