2013-02-17 7 views
2

Как удалить все пробелы, которые находятся за пределами "" на строке? Например:Удаление пробелов за пределами "" из строки

0507 ? "Y e a" : "No" 

Если вернуться:

0507?"Y e a":"No" 

Спасибо.

+0

Пожалуйста, прочитайте: http://stackoverflow.com/questions/5455794/removing-whitespace-from-strings-in-java – user1428716

+0

Привет, ну, я читал, но ... никаких результатов. Я знаю, как заменить все пробелы из String, но я не знаю, как заменить только пробелы, которые находятся вне кавычек. – BloodShura

ответ

3

попробовать

String s = "0507 ? \"Y e a\" : \"No\"".replaceAll(" +([?:]) +", "$1"); 
    System.out.println(s); 

печатает

0507?"Y e a":"No" 
+0

Спасибо, Евгений! – BloodShura

1

-вы можно разделить на "с помощью st.split функции()

-Тогда применять st.replaceAll (" \ S», "") только на четных индексов массива

-Тогда concate все элементы массива, используя различные Utilites как Apache Commons Lang StringUtils.join (

например:

Оригинал Струнные - 0507 "Y еа": "Нет"

После раскола с "..... {0507? , Y e a,:, No}

Применить st.replaceAll ("\ s", "") к равномерным индексам массива .... {0507? , Y еа:, No}

Concate использованием StringUtils.join (с, "\" ") ...... 0507 "Y еа":" Нет»

Пример кода:

String input="0507 ? \"Y e a\" : \"No\""; 
    String[] inputParts = input.split("\""); 

    int i = 0; 
    while(i< inputParts.length) 
    { 
     inputParts[i]=inputParts[i].replaceAll("\\s", ""); 
     i+=2; 
    } 

    String output = StringUtils.join(inputParts, "\""); 
+0

Спасибо, Амит! : D – BloodShura

1

или попробовать StringTok enizer: Чтение. tokenizer использует набор разделителей по умолчанию, который представляет собой «\ t \ n \ r \ f»: символ пробела, символ табуляции, символ новой строки, символ возврата каретки и символ формы.

StringTokenizer tok=new StringTokenizer(yourString); 
    String temp=""; 

    while(tok.hasMoreElements()){ 
     temp=temp+tok.nextElement(); 
    } 

    System.out.println("temp"+temp); 
+0

попробуйте все, что наиболее эффективно (алгоритм мудрый) – user1428716

+0

Erm ... но я думаю, что это преобразит 100? «y e a»: «n o» in: 100? «yea»: «no», и мне нужно удалить пробелы только за пределами кавычек («) e.e. Но, в любом случае, спасибо! – BloodShura

1

Этот код

static Pattern groups = Pattern.compile("([^\\\"])+|(\\\"[^\\\"]*\\\")"); 
public static void main(String[] args) { 
    String test1="0507 ? \"Y e a\" : \"No\""; 
    System.out.println(replaceOutsideSpace(test1)); 
    String test2="0507 ?cc \"Y e a\" :bb \"No\""; 
    System.out.println(replaceOutsideSpace(test2)); 
    String test3="text text text text \"Y e a\" :bb \"No\" \"\""; 
    System.out.println(replaceOutsideSpace(test3)); 
    String test4="text text text text \"Y e a\" :bb \"No\" \"\" gaga gag ga end"; 
    System.out.println(replaceOutsideSpace(test4)); 
} 
public static String replaceOutsideSpace(String text){ 
    Matcher m = groupsMatcher(text); 
    StringBuffer sb = new StringBuffer(text.length()); 
    while(m.find()){ 
     String g0=m.group(0); 
     if(g0.indexOf('"')==-1){g0=g0.replaceAll(" ", "");} 
     sb.append(g0); 
    } 
    return sb.toString(); 
} 
private synchronized static Matcher groupsMatcher(String text) 
{return groups.matcher(text);} 

печатает

0507?"Y e a":"No" 
0507?cc"Y e a":bb"No" 
texttexttexttext"Y e a":bb"No""" 
texttexttexttext"Y e a":bb"No"""gagagaggaend 
Смежные вопросы