Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Replace - Fatal编程技术网

Java 如何替换“}”&引用;从一根绳子?

Java 如何替换“}”&引用;从一根绳子?,java,string,replace,Java,String,Replace,嗯,我想打个电话 String newString = oldString.replaceAll("}",""); 但我尝试过的}出现了错误: String newString = oldString.replaceAll("\\}\\",""); String newString = oldString.replaceAll("\}\",""); String newString = oldString.replaceAll("//}//",""); String newString = o

嗯,我想打个电话

String newString = oldString.replaceAll("}","");
但我尝试过的}出现了错误:

String newString = oldString.replaceAll("\\}\\","");
String newString = oldString.replaceAll("\}\","");
String newString = oldString.replaceAll("//}//","");
String newString = oldString.replaceAll("/}/","");
而且它们都不起作用。我怎么能这么做

谢谢

以下是错误:

10-19 12:17:44.907: W/System.err(7030): java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 1:
10-19 12:17:44.907: W/System.err(7030): }
10-19 12:17:44.907: W/System.err(7030):  ^
10-19 12:17:44.907: W/System.err(7030):     at java.util.regex.Pattern.compileImpl(Native Method)
10-19 12:17:44.907: W/System.err(7030):     at java.util.regex.Pattern.compile(Pattern.java:400)
10-19 12:17:44.907: W/System.err(7030):     at java.util.regex.Pattern.<init>(Pattern.java:383)
10-19 12:17:44.907: W/System.err(7030):     at java.util.regex.Pattern.compile(Pattern.java:374)
10-19 12:17:44.907: W/System.err(7030):     at java.lang.String.replaceAll(String.java:1784)
10-19 12:17:44.907: W/System.err(7030):     at com.rotaryheart.MainActivity$1.onClick(MainActivity.java:70)
10-19 12:17:44.907: W/System.err(7030):     at android.view.View.performClick(View.java:4084)
10-19 12:17:44.907: W/System.err(7030):     at android.view.View$PerformClick.run(View.java:16966)
10-19 12:17:44.907: W/System.err(7030):     at android.os.Handler.handleCallback(Handler.java:615)
10-19 12:17:44.907: W/System.err(7030):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-19 12:17:44.907: W/System.err(7030):     at android.os.Looper.loop(Looper.java:137)
10-19 12:17:44.907: W/System.err(7030):     at android.app.ActivityThread.main(ActivityThread.java:4940)
10-19 12:17:44.907: W/System.err(7030):     at java.lang.reflect.Method.invokeNative(Native Method)
10-19 12:17:44.907: W/System.err(7030):     at java.lang.reflect.Method.invoke(Method.java:511)
10-19 12:17:44.915: W/System.err(7030):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
10-19 12:17:44.915: W/System.err(7030):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
10-19 12:17:44.915: W/System.err(7030):     at dalvik.system.NativeStart.main(Native Method)
这是我的电话

go.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            try {
                try {
                  oldString= "} test } for }";

                        Toast.makeText(getApplicationContext(), "Test for }",
                                Toast.LENGTH_SHORT).show();
                        String newString = oldString.replaceAll("}", "");
                        Toast.makeText(getApplicationContext(), ""+newString , Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

replaceAll
需要一个正则表达式,
{
}
在正则表达式中有特殊的含义。您可以改为使用(与直觉相反,会替换所有发生的事件,但会将要替换的字符串作为参数):

试试这个:

String newString = oldString.replaceAll("\\}","");
只要做:

.replaceAll("\\{", "");

你需要避开这个特殊角色

尝试以下操作以转义正则表达式中的大括号:

\}
在Java中是这样的:

String newString = oldString.replace("\\}","");

提示:
replaceAll
与大多数应用程序的
replace
相同

您的第一个代码应该可以正常工作。你不需要逃避你的
}

但是,如果正在使用大括号,则确实需要避开大括号-
{

因此,守则:

str = str.replaceAll("}", ""); 
很好。你遇到的问题可能是因为你对我们隐瞒了什么

如果你有一些不同于上面所示的正则表达式,那么我们就看不出到底是什么问题

好的,我用您给定的字符串进行了尝试:-

   String str = "} test } for }";
   str = str.replaceAll("}", "");
   System.out.println(str);
输出:-

 test  for 
正如您看到的,我得到了所需的输出,但不明白为什么这在您的代码中不起作用

但是,您仍然可以尝试使用
replace()
方法,看看它是否有效:-

String newString = oldString.replace("}", "");


您还需要对源代码中的
\`进行转义,您可以使用带转义的
replaceAll`或不带转义的
replace
。我尝试按照上面的方式编译它,但没有转义,它读取括号(我有意将其设置为“解析时到达文件末尾”的位置)错误,不转义大括号避免了错误(将大括号作为代码读取)@assylias..嗯,
}
不需要转义..
str=str.replaceAll(“}”,“a”);
对我来说很好???@RohitJain快速检查代码,
}
如果没有
{
之前,但如果有…@RohitJain同意-他的实际代码可能略有不同。@assylias.我们刚刚发现,即使在正则表达式中有
{
之前的
}
,我们也不需要逃避
}
@RohitJain该操作似乎是在Android上进行的-Android JDK与桌面Java JDK可能是不同的实现。您的第一行代码工作起来很有魅力!有什么问题吗?对于Java正则表达式,我建议使用所有的双反斜杠,您可以使用正常的正则表达式语法,对其进行测试,该工具将显示Java正则表达式st铃声。我会经常验证我的正则表达式字符串在那里,然后我把它的代码。节省我的时间和混乱。添加了我的错误,请审查it@TedHopp..这不会有太大的区别。只需使用它而不转义
}
就可以了。请尝试一下。但是,当您使用
{
然后你需要逃逸..@RohitJain-是的,我刚刚通过实验发现了这一点。很有趣。我想这类似于HTML中处理
的方式——开头字符总是特殊的,结尾字符是文字,除非有不匹配的开头字符可以配对。添加了我的onClick,请检查一下。Thanks@RotaryHeary.试着用str.replace(“}”和“);
看看它是否有效。天哪,我太蠢了,我尝试了100万种不同的方法,但我完全忘记了这一个……成功了:)非常感谢!您应该将它添加到您的答案中;)@RotaryHeary。这很好。但是仍然无法理解,为什么您以前的代码不起作用……(可能是其他原因。但是您让它起作用是很好的。@RotaryHeary。另外,作为您的参考,
replaceAll()
将第一个参数作为
regex
,因此您需要转义所有特殊字符。但是在使用
replace()
时,您不需要这样做。。
 test  for 
String newString = oldString.replace("}", "");