Операторы, разделяющие операнды с использованием регулярного выражения [duplicate]

                 var dataform = new FormData($("#myform")[0]);

                    //console.log(dataform);
                     $.ajax({
                        url: 'url',
                        type: 'POST',
                        data: dataform,
                        async: false,
                        success: function (res) {
                            response data;
                        },
                        cache: false,
                        contentType: false,
                        processData: false
                    });
49
задан marathon 22 February 2012 в 07:31
поделиться

7 ответов

Лучше всего, чтобы просто удалить любой ведущий разделитель:

String input = "/Test/Stuff";
String[] test = input.replaceFirst("^/", "").split("/");

Вы можете сделать его более общим, поставив его в метод:

public String[] mySplit(final String input, final String delim)
{
    return input.replaceFirst("^" + delim, "").split(delim);
}

String[] test = mySplit("/Test/Stuff", "/");
43
ответ дан Joe Attardi 22 August 2018 в 12:27
поделиться

Я думаю, вам придется вручную удалить первую пустую строку. Простой способ сделать это -

  String string, subString;
  int index;
  String[] test;

  string = "/Test/Stuff";
  index  = string.indexOf("/");
  subString = string.substring(index+1);

  test = subString.split("/"); 

Это исключает ведущую пустую строку.

0
ответ дан CodeBlue 22 August 2018 в 12:27
поделиться
  • 1
    Но с этим кодом, если строка ввода не имела , имеет лидирующий разделитель, вы пропустили бы первый компонент. Например, "Test/Stuff" будет давать только один элемент, «Stuff». – Joe Attardi 22 February 2012 в 07:45
  • 2
    Хорошая точка зрения. В этом случае потребуется дополнительная проверка. – CodeBlue 22 February 2012 в 07:55

Я думаю, что нет встроенной функции для удаления пустой строки в Java. Вы можете удалить пустую строку удаления, но это может привести к ошибке. Для безопасности вы можете сделать это, написав небольшой фрагмент кода следующим образом:

  List<String> list = new ArrayList<String>();

  for(String str : test) 
  {
     if(str != null && str.length() > 0) 
     {
         list.add(str);
     }
  }

  test = stringList.toArray(new String[list.size()]);
1
ответ дан codeit 22 August 2018 в 12:27
поделиться

Я не думаю, что вы можете сделать это с помощью встроенного метода split. Таким образом, у вас есть два варианта:

1) Сделайте свой собственный split

2) Итерации через массив после вызова split и удаления пустых элементов

Если вы сделаете свой вы можете просто объединить эти два параметра

public List<String> split(String inString)
{
   List<String> outList = new ArrayList<>();
   String[]     test    = inString.split("/");

   for(String s : test)
   {
       if(s != null && s.length() > 0)
           outList.add(s);
   }

   return outList;
}

, или вы можете просто проверить, находится ли разделитель в первой позиции, прежде чем вы вызовете split и проигнорируете первый символ, если это произойдет:

String   delimiter       = "/";
String   delimitedString = "/Test/Stuff";
String[] test;

if(delimitedString.startsWith(delimiter)){
    //start at the 1st character not the 0th
    test = delimitedString.substring(1).split(delimiter); 
}
else
    test = delimitedString.split(delimiter);
5
ответ дан Hunter McMillen 22 August 2018 в 12:27
поделиться

Вот как я обошел эту проблему. Я беру строку, вызываю .toCharArray () на ней, чтобы разбить ее на массив символов, а затем пропустить этот массив и добавить его в список строк (обертывание каждого символа с помощью String.valueOf). Я предполагаю, что есть компромисс производительности, но это похоже на читаемое решение. Надеюсь это поможет!

 char[] stringChars = string.toCharArray(); 
 List<String> stringList = new ArrayList<>(); 

 for (char stringChar : stringChars) { 
      stringList.add(String.valueOf(stringChar)); 
 }
0
ответ дан K. George Pradhan 22 August 2018 в 12:27
поделиться

Apache Commons имеет метод утилиты для этого: org.apache.commons.lang.StringUtils.split

StringUtils.split ()

На самом деле в нашей компании мы теперь предпочитаем использовать этот метод для разделения во всех наших проектах.

19
ответ дан mbroshi 22 August 2018 в 12:27
поделиться
  • 1
    Кажется, не поддерживает регулярное выражение, как версия JDK. – Stephan 28 February 2015 в 03:03

Для этой цели вы можете использовать StringTokenizer ...

String test1 = "/Test/Stuff";
        StringTokenizer st = new StringTokenizer(test1,"/");
        while(st.hasMoreTokens())
            System.out.println(st.nextToken());
0
ответ дан Shashank Kadne 22 August 2018 в 12:27
поделиться
  • 1
    StringTokenizer помечен как устаревший в API и, вероятно, не должен использоваться. – Hunter McMillen 22 February 2012 в 07:37
  • 2
    Его не осуждали !!! [Д0] docs.oracle.com/javase/7/docs/api/java/util/… – Shashank Kadne 22 February 2012 в 07:46
  • 3
    @McMillen вы можете сказать, из какой версии он устарел. На самом деле я этого не знаю. – Chandra Sekhar 22 February 2012 в 07:48
  • 4
    Это не официально устарело, но состояние Javadocs и StringTokenizer - это унаследованный класс, который сохраняется по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Рекомендуется, чтобы каждый, кто ищет эту функциональность, использовал метод split для String или пакет java.util.regex. & Quot; – Joe Attardi 22 February 2012 в 07:50
  • 5
    @ShashankKadne Он может не сказать устаревшего, но на странице API есть такая точная строка: StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead. – Hunter McMillen 22 February 2012 в 07:50
Другие вопросы по тегам:

Похожие вопросы: