以下代码使用Java replace()中的String类的方法.
String a = "abc/xyz";
System.out.println(a.replace("/", "\\"));
Run Code Online (Sandbox Code Playgroud)
/在给定的String a中被替换为\.
如果我们使用replaceAll()如下方法,同样的事情是错误的.
System.out.println(a.replaceAll("/", "\\"));
Run Code Online (Sandbox Code Playgroud)
它会导致java.lang.StringIndexOutOfBoundsException抛出异常.它需要两个额外的反斜杠\,如下所示,因为replaceAll()使用正则表达式,而不是replace()方法的情况.
System.out.println(a.replaceAll("/", "\\\\"));
Run Code Online (Sandbox Code Playgroud)
唯一的问题是为什么这个方法只使用两个斜线就像这样a.replaceAll("/", "\\")抛出java.lang.StringIndexOutOfBoundsException?
split()另一方面,该方法最初发布了一个waring Invalid regular expression: Unexpected internal error(我正在使用NetBeans 6.9.1).
String b="abc\\xyz";
System.out.println(b.split("\\")[0]+b.split("\\")[1]); //Issues a warning as specified.
Run Code Online (Sandbox Code Playgroud)
尝试运行此操作会导致java.util.regex.PatternSyntaxException抛出异常.
由于它使用正则表达式replaceAll(),它需要四个反斜杠.
System.out.println(b.split("\\\\")[0]+b.split("\\\\")[1]);
Run Code Online (Sandbox Code Playgroud)
为什么a.replaceAll("/", "\\\\");在前面的情况下不会发出这样的警告或这样的运行时异常,即使它有一个无效的模式?
我正在编写使用的代码,Matcher#replaceAll并发现以下结果非常令人困惑:
Pattern.compile("(.*)").matcher("sample").replaceAll("$1abc");
Run Code Online (Sandbox Code Playgroud)
现在,我希望输出可以,sampleabc但Java会引发我的注意sampleabcabc.
有人有什么想法吗?
现在,当然,当我锚定模式(^(.*)$)时,问题就消失了.我仍然不知道为什么地狱会replaceAll做那样的双重替换.
并加上侮辱伤害,遵循以下代码:
Pattern.compile("(.*)").matcher("sample").replaceFirst("$1abc")
Run Code Online (Sandbox Code Playgroud)
按预期工作,只返回sampleabc.
我想从路径字符串中替换空格.我试过下面但似乎没有工作:
String path = "/Users/TD/San Diego";
path=path.replaceAll(" ","\\ ");
System.out.println(path);
Run Code Online (Sandbox Code Playgroud)
目标是转换
"/ Users/TD/San Diego"改为"/ Users/TD/San\Diego"
字符串中的任何其他空间也需要替换为"\"
我可以通过使用Matcher.quoteReplacement. 我可以通过添加边界字符替换单词来替换美元符号:
from = "\\b" + from + "\\b";
outString = line.replaceAll(from, to);
Run Code Online (Sandbox Code Playgroud)
但我似乎无法将它们结合起来用美元符号代替单词.
这是一个例子.我试图用" $temp4" 替换" "(NOT $temp40)register1.
String line = "add, $temp4, $temp40, 42";
String to = "register1";
String from = "$temp4";
String outString;
from = Matcher.quoteReplacement(from);
from = "\\b" + from + "\\b"; //do whole word replacement
outString = line.replaceAll(from, to);
System.out.println(outString);
Run Code Online (Sandbox Code Playgroud)
输出
"add, $temp4, $temp40, 42"
Run Code Online (Sandbox Code Playgroud)
如何让它替换$ temp4和$ temp4?
<?php
$str = "word <a href=\"word\">word</word>word word";
$str = preg_replace("/word(?!([^<]+)?>)/i","repl",$str);
echo $str;
# repl <word word="word">repl</word>
?>
Run Code Online (Sandbox Code Playgroud)
来源:http://pureform.wordpress.com/2008/01/04/matching-a-word-characters-outside-of-html-tags/
不幸的是,我的项目需要一个仅适用于Java的语义库...
//谢谢Celso
如何用Java中的fullstop替换字符串中的所有"("和")"?我试着用以下方式:
String url = "https://bitbucket.org/neeraj_r/url-shortner)";
url.replaceAll(")", ".");
url.replaceAll(")", ".");
Run Code Online (Sandbox Code Playgroud)
但它不起作用.错误是:
Exception in thread "main" java.util.regex.PatternSyntaxException: Unmatched closing
')'
)
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at com.azzist.cvConversion.server.URLChecker.main(URLChecker.java:32)
Run Code Online (Sandbox Code Playgroud)
我认为这个问题也存在于所有正则表达式中.\之前添加)不起作用.
我想创建一个程序,在用户输入的字符串中给出字符,单词等的数量.要获得单词计数,我需要删除所有句点和逗号形成一个字符串.到目前为止我有这个:
import javax.swing.JOptionPane;
public class WordUtilities
{
public static void main(String args[])
{
{
String s = JOptionPane.showInputDialog("Enter in any text.");
int a = s.length();
String str = s.replaceAll(",", "");
String str1 = str.replaceAll(".", "");
System.out.println("Number of characters: " + a);
System.out.println(str1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但最后我只得到了这个:
Number of characters: (...)
Run Code Online (Sandbox Code Playgroud)
为什么不给我字符串没有逗号和句号?我需要修理什么?
我想将所有"*"转换为".*",除了"\*"
String regex01 = "\\*toto".replaceAll("[^\\\\]\\*", ".*");
assertTrue("*toto".matches(regex01));// True
String regex02 = "toto*".replaceAll("[^\\\\]\\*", ".*");
assertTrue("tototo".matches(regex02));// True
String regex03 = "*toto".replaceAll("[^\\\\]\\*", ".*");
assertTrue("tototo".matches(regex03));// Error
Run Code Online (Sandbox Code Playgroud)
如果"*"是第一个出现错误的字符:java.util.regex.PatternSyntaxException:在索引0附近悬挂元字符'*'
什么是正确的正则表达式?
我对API请求有一个服务器响应,如下所示。
Success! Your request has been sent.\n\nWe’ll inform you once it is done.
Run Code Online (Sandbox Code Playgroud)
我需要在小吃栏中显示此消息。我需要\n在此响应中添加新行。我试图通过使用replaceAll像
String message = (serverResponse.getMessage()).replaceAll("\\n", System.getProperty("line.separator"));
Run Code Online (Sandbox Code Playgroud)
但它显示像这样
如果我添加了string.xml资源文件并开始使用,getString(R.string.message)则会出现相同的消息,\n则说明工作正常。如何从此响应字符串获取新行?
我尝试\n使用<new_line>服务器响应中的其他字符进行更改,并且与可以正常使用replaceAll。问题仅\n在于响应消息。有什么解析的方法\n吗?
我想替换字符串中所有出现的组.
String test = "###,##.##0.0########";
System.out.println(test);
test = test.replaceAll("\\.0(#)", "0");
System.out.println(test);
Run Code Online (Sandbox Code Playgroud)
我试图获得的结果###,##.##0.000000000
基本上,我想要替换所有#尾随的符号.0.我发现这是关于动态替换的,但我不能真正使它工作.
最佳解决方案不会考虑要替换的哈希数量(如果这样可以清除任何混淆).