2016-05-19 2 views
2

вызова метода:Как заменить серию разделители с конкретным текстом

String Текст = «Тест наличных денег за счет% валютного%»;

String Token = "12345 USD";

String parsedText = parseText (текст, токен);

частных статических строк parseText (String текст, строковые лексемы) {

String textDelimiter = text.trim().replaceAll("[a-zA-Z0-9_.]", ""); 

    String tokenDelimiter = tokens.trim().replaceAll("[a-zA-Z0-9_.]", ""); 

    String[] tokenSplit = tokens.split(tokenDelimiter); 

    String[] textSplit = text.split(textDelimiter); 

    String result = ""; 

    for (int i = 0; i < textSplit.length; i++) { 

     result += textSplit[i] + tokenSplit[i]; 
    } 

    System.out.println(result); 

    return result; 
} 
+1

вы можете предоставить код, который вы пытались ? – Vijay

+0

См. Мой ответ для неизвестных номеров токена. Некоторый тест необходимо добавить, чтобы исключить исключение, если вы не уверены в значениях. – AxelH

ответ

1

Без проверки правильного размера массивов, это может быть подсказка:

private String parseText(String text, String tokens, String textDelimiter, String tokenDelimiter){ 
    String[] tokenSplit = tokens.split(tokenDelimiter); 
    String[] textSplit = text.split(textDelimiter); 

    String result = ""; 
    for (int i = 0; i <textSplit.length; i++){ 
     result += textSplit[i] + tokenSplit[i]; 
    } 
    System.out.println(result); 

    return result; 
} 

И призыв:

String Text="Test Cash deposit for an account % of currency %"; 
String Token="12345|USD"; 

String parsedText = parseText(Text, Token, "%", "\\|"); 
+0

Токендиметр динамический, зависит от будущих требований, он может быть чем угодно – Meenu

+0

токенов может быть больше чем 2 также – Meenu

+0

Затем вы можете передать разделитель в аргументах метода. Этот метод работает с более чем двумя токенами –

1

Если вы в состоянии изменить формат Text и Token вы могли бы сделать это таким образом

String format = "Test Cash deposit for an account %s of currency %s"; 
String[] tokens = {"12345","USD"}; 
String amended = String.format(format, tokens[0], tokens[1]); 
System.out.println(amended); 
0

Вы должны использовать метод String.format(..), например:

String output = String.format("Test Cash deposit for an account %s of currency %s","12345","USD"); 
+0

private static void parseText (String text, String tokens) { { { final Строка regex = "[%] +"; text = text.replaceAll (regex, "% s"); System.out.println (String.format (текст, (Object []) tokens.split (regex))); }} государственной статической силы основных (String [] арг) { String Текст = "Тест наличных денег для учетной записи А/C% fdjf%."; String Token = "12345"; parseText (текст, токен); – Meenu

+0

это даст мне java.util.MissingFormatArgumentException ,,, может кто-нибудь предложить, как преодолеть это – Meenu

0

Попробуйте

String Text="Test Cash deposit for an account %d of currency %s"; 
String[] Tokens="12345|USD".split("\\|"); 
System.out.printf(Text, Integer.valueOf(Tokens[0]), Tokens[1]); 
+0

private static void parseText (текст строки, строковые маркеры) {if (tokens! = Null) {final String regex = "[ %] + "; text = text.replaceAll (regex, "% s"); System.out.println (String.format (текст, (Object []) tokens.split (regex))); }} public static void main (String [] args) {String Text = "Test Cash. депозит для учетной записи A/C% fdjf%"; String Token = "12345"; parseText (текст, токен); } Может ли кто-нибудь предложить решение для этого – Meenu

0

Для динамических маркеров, просто создать метод:

public String convert(String text, String value){ 
    return String.format("test", value.split("\\|") 
); 

Вы j усть должны вызвать его, чтобы преобразовать все «% S» в тексте с параметром получил:

String Text="Test Cash deposit for an account %s of currency %s"; 
String Token="12345|USD"; 
System.out.println(convert(Text, Token)); 

Вы можете использовать его непосредственно, как:

System.out.println(
    String.format(
     "Test Cash deposit for an account %s of currency %s", 
     (Object[]) "12345|USD".split("\\|"))); //Casting to remove the warning, not sure if one Object or a var-args. Cast in array to use var-args 

, но это не очень приятно;)

Вы будете уверены, что число% s больше или равно числу полученных токенов, если вы не закончите исключение (для многих аргументов).

EDIT:

Для версии без знания, специфические разделители для строковых: (с использованием не [A-Za-z0-9._]

public static void main(String[] args) { 
    parseText("test % to % or #", "5+8^test"); //test 5 to 8 or test 
} 

private static void parseText(String text, String tokens) { 
    String regex = "[^\\w. ]+"; // \w = alphanumeric + _ 
    text = text.replaceAll(regex, "%s"); 
    System.out.println(String.format(text, (Object[]) tokens.split(regex))); 
} 
+0

scenerio, где я не хочу передавать текст и токен-метрику в методе, вместо этого нужно пройти только текст и токен, и ему нужно выбрать метрику из этого текста и сделать замену. – Meenu

+0

. Понимаете, что вы просите. – AxelH

+0

вызовите метод, передав 2 параметра: текст и токен. После вызова разделите токен и текстовый делитель и сохраните его в переменной, делиметр может быть любым, кроме [A-Za-z] [0-9] [.] – Meenu

Смежные вопросы