Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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:替换字符串的最后一个字符和第一个字符_Java - Fatal编程技术网

Java:替换字符串的最后一个字符和第一个字符

Java:替换字符串的最后一个字符和第一个字符,java,Java,我想手动添加两个java JSON字符串,因此为此我需要删除“}”,并将其替换为第一个JSON字符串的逗号,“,并删除第二个JSON字符串的第一个”{。 这是我的节目 import java.util.Map; import org.codehaus.jackson.type.TypeReference; public class Hi { private static JsonHelper jsonHelper = JsonHelper.getInstance(); publi

我想手动添加两个java JSON字符串,因此为此我需要删除“}”,并将其替换为第一个JSON字符串的逗号,“,并删除第二个JSON字符串的第一个”{。 这是我的节目

import java.util.Map;
import org.codehaus.jackson.type.TypeReference;
public class Hi {
    private static JsonHelper jsonHelper = JsonHelper.getInstance();
    public static void main(String[] args) throws Exception {

        Map<String, Tracker> allCusts = null;

String A = "{\"user5\":{\"Iden\":4,\"Num\":1},\"user2\":{\"Iden\":5,\"Num\":1}}";

String B = "{\"user1\":{\"Iden\":4,\"Num\":1},\"user3\":{\"Iden\":6,\"Num\":1},\"user2\":{\"Iden\":5,\"Num\":1}}";

        String totalString = A + B;
        if (null != totalString) {
            allCusts = (Map<String, Tracker>) jsonHelper.toObject(
                    totalString, new TypeReference<Map<String, Tracker>>() {
                    });

        }
        System.out.println(allCusts);
    }
}
我试过了

String  Astr = A.replace(A.substring(A.length()-1), ",");
String  Bstr = B.replaceFirst("{", "");

String totalString =  Astr + Bstr ;
有了这个,我得到了

线程“main”java.util.regex.PatternSyntaxException中的异常:非法重复


请建议。

{
是正则表达式的控制字符,由于它的第一个参数是正则表达式的字符串表示形式,因此需要转义
{
,因此它不会被视为控制字符:

String  Bstr = B.replaceFirst("\\{", "");

我想说的是,在这里使用replace方法真是太过分了,因为您只是想从字符串的两端切掉一个字符。这也应该起作用:

String totalString = A.substring(0, A.length()-1) + "," + B.substring(1);

{
是正则表达式的控制字符,由于它将正则表达式的字符串表示形式作为第一个参数,因此需要对
{
进行转义,这样它就不会被视为控制字符:

String  Bstr = B.replaceFirst("\\{", "");

我想说的是,在这里使用replace方法真是太过分了,因为您只是想从字符串的两端切掉一个字符。这也应该起作用:

String totalString = A.substring(0, A.length()-1) + "," + B.substring(1);

前两条语句中存在一些问题。将
0
添加为
substring
方法中的起始索引,并保留该索引。将
\\
作为匹配模式中的转义字符,并在第二条语句中使用一个
作为替换值

String  Astr = A.substring(0, A.length()-1);//truncate the ending `}`
String  Bstr = B.replaceFirst("\\{", ",");//replaces first '{` with a ','
String totalString =  Astr + Bstr ;

请注意:有更好的方法,但我只是想纠正您的陈述。

前两个陈述中的一些问题。在
子字符串
方法中添加
0
作为开始索引,然后继续。在匹配模式中将
\\
作为转义字符,在第二个陈述中添加一个
作为替换字符价值

String  Astr = A.substring(0, A.length()-1);//truncate the ending `}`
String  Bstr = B.replaceFirst("\\{", ",");//replaces first '{` with a ','
String totalString =  Astr + Bstr ;

请注意:有更好的方法,但我只是想纠正您的说法。

当然,regex看起来不是一个很好的工具。但以下方法似乎有效:

String str = "{..{...}..}}";
str = str.replaceFirst("\\{", "");
str = str.replaceFirst("}$", ","); 
System.out.println(str);
输出

..{..}..}


当然,regex看起来并不是一个很好的工具。但以下几点似乎很有效:

String str = "{..{...}..}}";
str = str.replaceFirst("\\{", "");
str = str.replaceFirst("}$", ","); 
System.out.println(str);
输出

..{..}..}


我会使用合适的JSON反序列化程序和序列化程序,比如。我会使用合适的JSON反序列化程序和序列化程序,比如。我认为
str.replaceFirst(“}$”,“,”)
在第二次替换中效果很好,而且它少了4个反斜杠。@DaoWen:谢谢。将它添加到答案中,看起来确实更好。:)Java确实需要一些原始字符串语法,可以用于正则表达式,就像Scala和C中的一样。不久前我写了一个正则表达式,需要连续5个反斜杠才能得到我认为
str.replaceFirst(“}$”,“,”)中的转义是正确的
在第二次替换中效果很好,而且它少了4个反斜杠。@DaoWen:谢谢。将它添加到答案中,看起来确实更好。:)Java确实需要一些原始字符串语法,可以用于正则表达式,就像Scala和C中的一样。不久前我写了一个正则表达式,需要连续5个反斜杠才能得到Java.Bleh中的转义正确。