Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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

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,将“文本”替换为“…”的示例: 之前: 文本文本文本 之后: …text…您需要对字符进行迭代,并仅附加在两个指定字符之间的字符。这可以通过以下方式完成: private String splitStr(String str, char first, char second) { StringBuilder sb = new StringBuilder(); if(str.isEmpty() || str.indexOf(first) < 0 || str.

将“文本”替换为“…”的示例:

之前: 文本文本文本

之后:
…text…

您需要对字符进行迭代,并仅附加在两个指定字符之间的字符。这可以通过以下方式完成:

private String splitStr(String str, char first, char second) {
        StringBuilder sb = new StringBuilder();
        if(str.isEmpty() || str.indexOf(first) < 0 || str.indexOf(second) < 0)
            return sb.toString();
        char[] chars = str.toCharArray();
        boolean append = false;
        for(char c : chars) {
            if(c == first) {
                sb.append(c);
                append = true;
            }else if(c == second) {
                sb.append(c);
                append = false;
            }else if(append)
                sb.append(c);
        }
        return sb.toString();
}
请注意,文本仍然包含文本,但其周围的大括号不会阻止其被替换

您需要将结果分配给一个新字符串才能使用它。弦是


在这种情况下,更容易找到您想要保留的内容,并替换其余内容

例如,像这样:

static String abbreviate(String input, String openTag, String closeTag) {
    String regex = Pattern.quote(openTag) + ".*?" + Pattern.quote(closeTag);
    StringBuilder buf = new StringBuilder();
    int start = 0;
    for (Matcher m = Pattern.compile(regex).matcher(input); m.find(); start = m.end()) {
        if (start < m.start())
            buf.append("...");
        buf.append(m.group());
    }
    if (start < input.length())
        buf.append("...");
    return buf.toString();
}
输出

…文本…文本。。。 …$text$…$text$。。。 ...
如果你表现出你试图自己解决问题,人们会感激你。可能会显示一些您尝试过但无法正常工作的代码,或者解释您对可以执行的操作的想法。如果你自己没有表现出任何尝试,听起来就像你在要求别人做你的家庭作业。答案是。。。。。。。。。当问题特别指出它应该返回…文本。。。这不是一个有用的答案。问题标题说替换所有字符串,这意味着可能有多对字符,例如文本,所以这不起作用。+1。像往常一样回答得很好!我在想,如果start"text(text)text" => "(text)"
String s = "text(text)text";
String newString = s.replace("text", "...");
System.out.println(newString);      //returns ...(...)...
static String abbreviate(String input, String openTag, String closeTag) {
    String regex = Pattern.quote(openTag) + ".*?" + Pattern.quote(closeTag);
    StringBuilder buf = new StringBuilder();
    int start = 0;
    for (Matcher m = Pattern.compile(regex).matcher(input); m.find(); start = m.end()) {
        if (start < m.start())
            buf.append("...");
        buf.append(m.group());
    }
    if (start < input.length())
        buf.append("...");
    return buf.toString();
}
System.out.println(abbreviate("text(text)text(text)text", "(", ")"));
System.out.println(abbreviate("text$text$text$text$text$text", "$", "$"));
System.out.println(abbreviate("text(text)text", ")", "("));