Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将大括号(例如{1})内的内容替换为其他内容_Java_String - Fatal编程技术网

Java 将大括号(例如{1})内的内容替换为其他内容

Java 将大括号(例如{1})内的内容替换为其他内容,java,string,Java,String,我有一个字符串如下 Hey {1}, you are {2}. 这里的1和2是将动态添加其值的键 现在我需要用1表示的值替换{1},然后我需要用上面句子中2表示的值替换{2} 我该怎么做 我知道字符串的拆分函数的作用,我也很清楚,有了这个函数,我可以做我想做的事情,但我正在寻找更好的东西 注意:我事先不知道这些钥匙是什么。我还需要找回钥匙。然后根据键,我需要替换字符串中的值。尝试使用: 如果您已经有一个字符串“嘿{1},您是{2}”。您可以使用正则表达式将{1}和{2}替换为%s String

我有一个字符串如下

Hey {1}, you are {2}.
这里的
1
2
是将动态添加其值的键

现在我需要用
1
表示的值替换
{1}
,然后我需要用上面句子中
2
表示的值替换
{2}

我该怎么做

我知道字符串的拆分函数的作用,我也很清楚,有了这个函数,我可以做我想做的事情,但我正在寻找更好的东西

注意:我事先不知道这些钥匙是什么。我还需要找回钥匙。然后根据键,我需要替换字符串中的值。

尝试使用:

如果您已经有一个字符串
“嘿{1},您是{2}”。
您可以使用正则表达式将
{1}
{2}
替换为
%s

String template = "Hey {1}, you are {2}.";
String x = String.format(template.replaceAll("\\{\\d\\}", "%s"), "Name", "Surname");
感谢您为这一款所做的一切……)。你可以这样做:

public static void main(String[] args) {
    String s = "Hey {1}, you are {2}.";
    HashMap<Integer, String> hm = new HashMap();
    hm.put(1, "one");
    hm.put(2, "two");
    Pattern p = Pattern.compile("(\\{\\d+\\})");
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group());
        String val1 = m.group().replace("{", "").replace("}", "");
        System.out.println(val1);
        s = (s.replace(m.group(), hm.get(Integer.parseInt(val1))));
        System.out.println(s);
    }

}
试试这个:

String str = "Hey {1}, you are {2}.";
str = str.replaceFirst("\\{.*?\\}", "Matt");
输出:

嘿,马特,你是{2}。

上述代码将替换
{1}
的第一个实例。如果您在循环中调用此序列,并将其替换为代码中的键值,它将按照给定字符串中提到的顺序替换
{…}
中的所有字符串。

尝试一下,我认为这将根据我从您的问题中了解的情况起作用

public static void main(String[] args) {
       String str = "Hey {1} your {2} is {3}  clear to {4}  ";
       Map<Integer,String> map = new LinkedHashMap<Integer,String>();
       map.put(1, "Smrita");
       map.put(2, "question");
       map.put(3, "not");
       map.put(4, "anyone");
       while(str.contains("{")){
           Integer i = Integer.parseInt(str.substring(str.indexOf("{")+1, str.indexOf("{")+2));
           str = str.replace("{"+i+"}", map.get(i));

       }
        System.out.println(str);
    }
publicstaticvoidmain(字符串[]args){
String str=“嘿{1}你的{2}对{4}来说是{3}清晰的”;
Map Map=newlinkedhashmap();
地图放置(1,“Smrita”);
地图.付诸表决(2,“问题”);
地图放置(3,“非”);
地图。放置(4,“任何人”);
while(str.contains(“{”)){
整数i=Integer.parseInt(str.substring(str.indexOf(“{”)+1,str.indexOf(“{”)+2));
str=str.replace(“{”+i+“}”,map.get(i));
}
系统输出打印项次(str);
}
输出为

嘿,斯姆丽塔,你的问题对任何人都不清楚

你可以使用java.text.MessageFormat中的MessageFormat。
有一些关于如何在这种情况下使用它的示例

这是一个不错的问题..为什么否决?@Smrita您想替换
{1}
{2}
从你的字符串中,只有两个值需要替换,不超过2是这样吗..不是真的,我会有很多值:)。这意味着你的字符串也是这样的
嘿{1},你是{2},你可以用{4}替换{3}
等等……您必须替换braces@amitbhardwaj是的,这就是我的情况:)。我恐怕我不能使用它!@Smrita你不能使用格式吗?谢谢你,它可以:)。最糟糕的是:)@Smrita-很幸运尝试将其修改为2个以上的值:p这个想法很好,但匹配和替换应该在
虽然(m.find()){…}
使用一个简单的正则表达式循环
\{(\\d+\\}
@anubhava-是的..我同意..我只是把问题复杂化..并急于发布解决方案:P@anubhava-改变了它..谢谢:)啊..我们中的一些人总是忽视简单的美。:+1
public static void main(String[] args) {
       String str = "Hey {1} your {2} is {3}  clear to {4}  ";
       Map<Integer,String> map = new LinkedHashMap<Integer,String>();
       map.put(1, "Smrita");
       map.put(2, "question");
       map.put(3, "not");
       map.put(4, "anyone");
       while(str.contains("{")){
           Integer i = Integer.parseInt(str.substring(str.indexOf("{")+1, str.indexOf("{")+2));
           str = str.replace("{"+i+"}", map.get(i));

       }
        System.out.println(str);
    }