如何用特定文本替换系列的分隔符

时间:2016-05-19 08:47:50

标签: java

致电方法:

String Text =" Test Cash。存入一个帐户%的货币%";

字符串标记=" 12345 | USD&#34 ;;

String parsedText = parseText(Text,Token);

private static String parseText(String text,String tokens){

    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;
}

5 个答案:

答案 0 :(得分: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, "%", "\\|");

答案 1 :(得分:1)

如果您能够更改TextToken的格式,则可以这样做

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);

答案 2 :(得分:0)

您必须使用String.format(..)方法,例如:

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

答案 3 :(得分: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]);

答案 4 :(得分:0)

对于动态令牌,只需创建一个方法:

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

你只需要将其称为转换每个&#39;%s&#39;在收到参数的文本中:

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的数量大于或等于收到的令牌数量,如果不是,您将最终得到一个例外(对于许多参数)。

编辑:

对于不知道两个String的特定分隔符的版本:(不使用[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)));
}