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

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....