Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Разбить строку на части


Автор: Gershkovich 30.9.2009, 13:38
Всем привет!

Помогите пжл с регуляр. выражением. Запутался совсем.
Надо строку разбить на две (именно на две) части, граница разбиения - знак подчерка "_"
Причем он может быть один и более раз, а может не быть вообще.

Т.е. вот возможные варианты
HelloWorld разбивается на  [HelloWorld] и [] (здесь пустая строка)
Hello_World разбивается на  [Hello] и [World]
Hello_World_forever разбивается на  [Hello_World] и  [forever] - здесь учитывается последний подчерк


ЗЫ Задача стоит именно с использованием регуляр. выражений.
StringTokenizer и String.lastIndexOf не предлагать

Заранее спасибо

Автор: LSD 1.10.2009, 11:40
Код

  public static final Pattern PATTERN = Pattern.compile("(.+)_(.+)");

  public static void main(String[] args) throws Exception
  {
    String s = "Hello_World_forever";
    Matcher matcher = PATTERN.matcher(s);
    if(matcher.matches())
    {
      String g1 = matcher.group(1);
      String g2 = matcher.group(2);
      System.out.println(g1 + " => " + g2);
    }
  }

Автор: Gershkovich 1.10.2009, 15:08
LSD, к сожадению не  работает если в строке нету подчерков
В том то и трудность - укзать в патерне что подчерк не обязателен.

Автор: LSD 1.10.2009, 17:51
Код

  public static final Pattern PATTERN = Pattern.compile("(.+)_([^_]*)|(.*)");

  public static void main(String[] args) throws Exception
  {
    Matcher matcher = PATTERN.matcher("Hello_World_forever");
    if(matcher.matches())
    {
      print(matcher);
    }

    matcher = matcher.reset("Hello World forever");
    if(matcher.matches())
    {
      print(matcher);
    }
  }

  public static void print(Matcher m)
  {
    final int groupCount = m.groupCount();
    for(int i = 1; i <= groupCount; i++)
    {
      System.out.printf("Group %d = '%s'%n", i, m.group(i));
    }
    System.out.println();
  }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)