Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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,我试图从字符串中删除以下字符集,如果其中任何一个是尾随字符 删除结尾“'”、“-”、“-”、“'s”、“ly”、“ed”、“ing”、“ness”、“”、“”、“;”, “?”、“!”、“、”、“:” 我在做以下事情 value.replaceAll("(ly|!|\\?|')+$",""); 但是如果字符串是这个!可爱的?!嗨!?'它给了我!可爱的?!嗨 我原以为会是!可爱?!嗨!? 我非常感谢您的帮助。如果字符串以您的选项结尾或不是下面的选项结尾,请首先进行匹配- if (value.en

我试图从字符串中删除以下字符集,如果其中任何一个是尾随字符

删除结尾“'”、“-”、“-”、“'s”、“ly”、“ed”、“ing”、“ness”、“”、“”、“;”, “?”、“!”、“、”、“:”

我在做以下事情

value.replaceAll("(ly|!|\\?|')+$","");
但是如果字符串是这个
!可爱的?!嗨!?'
它给了我
!可爱的?!嗨

我原以为会是
!可爱?!嗨!?


我非常感谢您的帮助。

如果字符串以您的选项结尾或不是下面的选项结尾,请首先进行匹配-

if (value.endsWith("\'") || value.endsWith("--") || value.endsWith("-"))
等等你的选择

然后从这个字符串中删除最后一个字符,如果只是这样-

value = value.substring(0, value.length()-1);
检查下面的示例代码以更好地理解-

String value = "!lovely?! hi!?'";
if (value.endsWith("\'") || value.endsWith("--") || value.endsWith("-")) {
   value = value.substring(0, value.length()-1);
}
System.out.println(value);
如果要使用Java正则表达式进行比较,请以这种方式使用-

if(value.matches(".*[' -- - ly ]$"))
  • *for以多个字符开头
  • ['--ly]提供选项的实际比较。为选项提供每个字符之间的空格
  • $for字符串以其中任何一个结尾
  • 通过这种方式,您可以使用正则表达式来比较字符串

    更具体地说,如果要从字符串中删除最后一个、两个、三个和四个字符,可以使用此最佳方法

    //provide only one character String that you want to check and remove
    if (value.matches(".*[' - ?]$")){
            value = value.substring(0, value.length()-1);
    }
    
    //provide two character String that you want to check and remove
    if (value.matches(".*[-- ly ab cd ef]$")){
            value = value.substring(0, value.length()-2);
    }
    
    //provide three character String that you want to check and remove
    if (value.matches(".*[-- lyy abc def ghi]$")){
            value = value.substring(0, value.length()-3);
    }
    
    //provide four character String that you want to check and remove
    if (value.matches(".*[-- lyyy abcd efgh ijkl]$")){
            value = value.substring(0, value.length()-4);
    }
    
    使用此模式:

    var patt = ([-?]|(ing|--|ly|ness|ed))(?=\s);
    var result = str.replace(patt,"");
    

    注意:您必须在patt中添加其他选项。

    您将分组
    (…)
    (或者甚至是非捕获分组
    (?:…)
    )与字符类
    […]
    值混为一谈。replaceAll((ly |!| \?|')+$,“;
    应该可以工作。(注意,还需要将问号转义为
    \?
    ,因为它在正则表达式中具有特殊意义。)。此外,如果您不想删除多个后缀,
    +
    是额外的。您对
    replaceAll
    的调用不包括您提到的所有结尾。此外,您似乎想从结尾删除结尾,只要找到新的标记,就继续这样做。这听起来像是解析器的工作。@Amadan我试过您的建议手势和编辑问题
    +
    表示“重复1次或更多次”。如果您只想去掉一个后缀,请删除
    +
    。对于整个字符集来说,这不是太多条件吗?使用正则表达式可以吗?@user2769614-是的,我只尝试一个。给我几分钟。@user2769614-请参阅JAVA正则表达式的编辑。您想比较字符串末尾和abov中的多个字符吗e代码我只删除最后一个字符。请记住这一点。@user2769614这是不正确的。您正在查看整个字符串是否匹配。如果匹配,则从值的最后一位删除。@newuserua_ext-请参阅最后四个If语句,我专门比较并删除了一个、两个、三个和四个字符很好。