为什么每次都不列一个新的清单?

2024-03-29 13:15:04 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> def foo(bar=[]):        
...    bar.append("apple")    
...    return bar

>>> foo()
["apple"]
>>> foo()
["apple", "apple"]
>>> foo()
["apple", "apple", "apple"]

为什么要加上“苹果”而不是一个新的名单


Tags: 苹果applereturnfoodefbar名单append
5条回答

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

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

您只需调用它来转换文本中的每个“%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的数量大于或等于接收到的令牌数量,否则将导致异常(对多个参数)

编辑:

对于不知道两个字符串的指定分隔符的版本:(使用not[a-zA-z0-9.382;]

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

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

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

如果你能改变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);

试试这个

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

如果不测试阵列的正确大小,这可能是一个提示:

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, "%", "\\|");

相关问题 更多 >