Java 如何删除字符串中由/*和*/表示的注释?
我的任务是创建一个方法来删除字符串中/*和*/之间的文本。此方法必须删除字符串中的所有注释 例如:Java 如何删除字符串中由/*和*/表示的注释?,java,regex,Java,Regex,我的任务是创建一个方法来删除字符串中/*和*/之间的文本。此方法必须删除字符串中的所有注释 例如: “敏捷的棕色/\\*和红色\*/狐狸跳过躺在门廊\*/上的懒狗/\*” 变成 “敏捷的棕色狐狸跳过了懒狗。 通过查找“/*”和“*/”的索引,并使用这些索引创建一个子字符串并将其删除,我成功地删除了一条注释。我创建了一个循环,检查/*的索引是否不等于一,如果不等于一,则删除一条注释 但是,删除一条注释后,我会在删除它后留下/*和*/标记,因此我编写的删除方法不起作用,因为它会删除空/**/标记中的
“敏捷的棕色/\\*和红色\*/狐狸跳过躺在门廊\*/上的懒狗/\*”
变成
“敏捷的棕色狐狸跳过了懒狗。
通过查找“/*”和“*/”的索引,并使用这些索引创建一个子字符串并将其删除,我成功地删除了一条注释。我创建了一个循环,检查/*的索引是否不等于一,如果不等于一,则删除一条注释
但是,删除一条注释后,我会在删除它后留下/*和*/标记,因此我编写的删除方法不起作用,因为它会删除空/**/标记中的代码,而不会移动到下一条注释。我试图通过创建一个子字符串来删除注释标记,该子字符串将注释包含为w使用前面提到的索引,创建一个子字符串,即字符串的其余部分,删除第一个字符串中的注释标记,然后将字符串组合在一起再次形成一个整体
当我运行该方法和循环时,它会删除第一条注释及其相应的注释标记,但第二条注释完全保持不变
public static String removeOneComment(String s)
{
String start = "/*";
String end = "*/";
int i = s.indexOf(start);
int i1 = s.indexOf(end);
String s1 = s.substring(i, i1);
s = s.replaceAll(s1, "");
String s1s = s.substring(0, i1 + 2);
String s1s1 = s.substring(i1 + 2);
s1s = s1s.replaceAll("/\\*", "");
s1s = s1s.replaceAll("\\*/", "");
s = s1s + s1s1;
return s;
}
public static String removeComments(String s)
{
String start = "/*";
String end = "*/";
for (int i = s.indexOf(start); i != -1; i = s.indexOf(start, i + 1));;
{
s = removeOneComment(s);
}
return s;
}
通过运行此代码,我得到的结果是“敏捷的棕色狐狸跳过了躺在门廊上的懒狗/*”
原始字符串:“敏捷的棕色/\*和红色\*/狐狸跳过了躺在门廊上的懒狗/\*。”
变成
通缉串:“敏捷的棕色狐狸跳过了懒狗。
任何帮助都将不胜感激。如果您可以使用,那么只需使用一个简单的字符串#replaceAll
,它将基本上消除所有内容之间的边界
(\/asterisk.*?asterisk\/)
如果不能使用正则表达式,只需使用一个简单的循环,其中包含一个
If
语句和一个确定边界的计数器。最后,使用String#substring
从靠近末尾的注释开始删除所有内容,以免丢失计数器的完整性。您应该使用此选项
public static String removeComments(String s)
{
return s.replaceAll("\\/\\* *\\w+ *\\*\\/", "");
}
有效:)
-我正在寻找开头和结尾的注释标记-*/
和\*
,这就是为什么替换为offset的原因
-很明显,它使用递归调用
从中得到的一些线索
测试:
input: The quick brown /\* and red\*/ fox jumped over the lazy dog /\*laying on the porch\*/.,
output: The quick brown fox jumped over the lazy dog.
input: The quick brown /\* and red\*/ fox jumped....,
output: The quick brown fox jumped....
您可以使用\(escape)防止格式与*(如:\*)一起变为斜体,因为您想得太多了。您可以使用just
.indexOf()
和.substring()
或just.replaceAll()
;你不需要全部三个!您可以使用str.replaceAll(“/\\*.*?\\*/”,“”)
替换所有已注释的字符串。Santhosh:您的正则表达式看起来很好,可以作为尾随空格的例外。在我看来,这比下面的答案要好。返回s.replaceAll(“/\*.*?\*/”,”);完全不起作用,仅删除第一条注释
input: The quick brown /\* and red\*/ fox jumped over the lazy dog /\*laying on the porch\*/.,
output: The quick brown fox jumped over the lazy dog.
input: The quick brown /\* and red\*/ fox jumped....,
output: The quick brown fox jumped....