Как получить все символы вхождения в префиксе строки в Java простым способом? - PullRequest
1 голос
/ 30 мая 2011

У меня есть строка, подобная этой: '0010'

Как я могу получить первые два нуля в этой строке образца.Правила здесь таковы, у меня есть переменная, которая содержит символ.Затем мне нужно посмотреть на строку, если первый символ строки совпадает со значением переменной.Мне нужно сохранить его, а затем, если вторая строка снова совпадает, объединить его и так далее.Если первый символ строки не соответствует значению переменной, он не будет сохранен и не будет смотреть на предыдущий символ.

Хотя у меня уже есть решение, но я использовал для этого около 10 строк кодов.,

Вот мой код:

    String start = "0001";
    String concatVal = "";
    char prefix = '0';

    for(int i = 0; i < start.length(); i++){
        if(start.charAt(i) == prefix){
            concatVal += prefix;
        } else {
            break;
        }
    }
    System.out.println(concatVal);

            //Output
            000

Если есть более простой способ добиться этого, пожалуйста, дайте мне знать.Спасибо

Ответы [ 5 ]

4 голосов
/ 30 мая 2011

Вы можете сделать это без построения строки результата char-by-char.Вместо этого ищите длину возможного совпадения, а затем вырезайте из исходной строки.

int length = 0;
while (length < start.length() && start.charAt(length) == prefix) {
    length++;
}
String concatVal = start.substring(0, length);
3 голосов
/ 30 мая 2011

выглядит неплохо, одно из возможных изменений будет

for(char ch : start.toCharArray())
{
if(ch == prefix)
{
   concatVal += prefix; 
} else {    
   break; 
 }
}
2 голосов
/ 30 мая 2011

Вы можете просто извлечь результат из исходной строки.

String text = "0001";
char prefix = '0';
String result = text;

for(int i = 0; i < text.length(); i++){
    if(text.charAt(i) != prefix) {
        result = text.substring(0, i);
        break;
    }
}
System.out.println(result);
2 голосов
/ 30 мая 2011

Ваш код уже очень прост.Английское описание не намного короче, так что не волнуйтесь.Немного переписав, вы получите:

public static String prefixOf(String s, char prefix) {
  for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) != prefix) {
      return s.substring(0, i);
    }
  }
  return s;
}

Это определение содержит только четыре действительные строки:

  1. Определение метода всегда необходимо для любого алгоритма.Не считается.
  2. Считает.
  3. Считает.
  4. Считает.
  5. Только закрывающая скобка, которая может быть опущена.
  6. Только закрывающая скобка, которая может быть опущена.
  7. Считается.
  8. Каждый метод должен заканчиваться закрывающей скобкой.Не считается.

По сравнению с вашим описанием, это действительно короткий.

1 голос
/ 30 мая 2011
    String start="0001";
    String concat="";
    String prefix="0";
    for(int i=0;i<start.length();i++){
        if(!prefix.contains(String.valueOf(start.charAt(i)))){
            concat=start.substring(0, i);
            break;
        }
    }
    System.out.println(concat);
...