Java 如何删除所有前导和尾随标点符号?

Java 如何删除所有前导和尾随标点符号?,java,string,punctuation,Java,String,Punctuation,我想删除字符串中所有的前导和尾随标点符号。我该怎么做 基本上,我想保留单词之间的标点符号,我需要删除所有前导和尾随标点符号 ,@,,&,/,-如果被字母包围,则允许使用 或数字 如果前面有字母或数字,则允许使用“\” 我试过了 Pattern p = Pattern.compile("(^\\p{Punct})|(\\p{Punct}$)"); Matcher m = p.matcher(term); boolean a = m.find(); if(a) term=term.repla

我想删除字符串中所有的前导和尾随标点符号。我该怎么做

基本上,我想保留单词之间的标点符号,我需要删除所有前导和尾随标点符号

  • @
    &
    /
    -
    如果被字母包围,则允许使用 或数字
  • 如果前面有字母或数字,则允许使用“
    \”
  • 我试过了

    Pattern p = Pattern.compile("(^\\p{Punct})|(\\p{Punct}$)");
    Matcher m = p.matcher(term);
    boolean a = m.find();
    if(a)
        term=term.replaceAll("(^\\p{Punct})", "");
    

    但是它不起作用

    使用模式教程。您必须创建一个正则表达式来匹配以字母或数字开头、以字母或数字结尾的字符串,并执行
    inputString.matches(“正则表达式”)

    使用模式教程。您必须创建一个正则表达式来匹配以字母或数字开头、以字母或数字结尾的字符串,并执行
    inputString.matches(“正则表达式”)
    确定。因此,基本上,您希望在字符串中找到一些模式,并在模式匹配时执行操作

    用简单的方式做这件事会很乏味。有效的解决方案可能包括以下内容

    while(myString.StartsWith("." || "," || ";" || ...)
      myString = myString.Substring(1);
    
    如果你想做一个更复杂的任务,用我提到的方法甚至是不可能的

    这就是我们使用正则表达式的原因。它是一种可以用来定义模式的“语言”。计算机将能够说,如果字符串与该模式匹配。要了解正则表达式,只需在google中键入即可。第一个链接之一:

    对于您的问题,您可以尝试以下方法:

    myString.replaceFirst("^[^a-zA-Z]+", "")
    
    正则表达式的含义:

    • 第一个^意味着在这个模式中,接下来的是 字符串的开头

    • []定义字符。在这种情况下,这些都不是问题 (第二^)个字母(a-zA-Z)

    • +符号表示之前的事物可以重复且静止 匹配正则表达式
    可以使用类似的正则表达式删除尾部字符

    myString.replaceAll("[^a-zA-Z]+$", "");
    

    $表示“在字符串的末尾”

    Ok。因此,基本上,您希望在字符串中找到一些模式,并在模式匹配时执行操作

    用简单的方式做这件事会很乏味。有效的解决方案可能包括以下内容

    while(myString.StartsWith("." || "," || ";" || ...)
      myString = myString.Substring(1);
    
    如果你想做一个更复杂的任务,用我提到的方法甚至是不可能的

    这就是我们使用正则表达式的原因。它是一种可以用来定义模式的“语言”。计算机将能够说,如果字符串与该模式匹配。要了解正则表达式,只需在google中键入即可。第一个链接之一:

    对于您的问题,您可以尝试以下方法:

    myString.replaceFirst("^[^a-zA-Z]+", "")
    
    正则表达式的含义:

    • 第一个^意味着在这个模式中,接下来的是 字符串的开头

    • []定义字符。在这种情况下,这些都不是问题 (第二^)个字母(a-zA-Z)

    • +符号表示之前的事物可以重复且静止 匹配正则表达式
    可以使用类似的正则表达式删除尾部字符

    myString.replaceAll("[^a-zA-Z]+$", "");
    

    $表示“在字符串末尾”

    您可以使用正则表达式:

    private static final Pattern PATTERN =
        Pattern.compile("^\\p{Punct}*(.*?)\\p{Punct}*$");
    
    public static String trimPunctuation(String s) {
      Matcher m = PATTERN.matcher(s);
      m.find();
      return m.group(1);
    }
    
    边界匹配器
    ^
    $
    确保整个输入匹配

    匹配任何单个字符

    星号
    *
    表示“将前面的内容匹配零次或多次”

    括号
    ()
    定义了一个捕获组,通过调用
    Matcher.group(1)
    检索该组的值


    (.*)
    中的
    表示您希望匹配是非贪婪的,否则后面的标点符号将包含在组中。

    您可以使用正则表达式:

    private static final Pattern PATTERN =
        Pattern.compile("^\\p{Punct}*(.*?)\\p{Punct}*$");
    
    public static String trimPunctuation(String s) {
      Matcher m = PATTERN.matcher(s);
      m.find();
      return m.group(1);
    }
    
    边界匹配器
    ^
    $
    确保整个输入匹配

    匹配任何单个字符

    星号
    *
    表示“将前面的内容匹配零次或多次”

    括号
    ()
    定义了一个捕获组,通过调用
    Matcher.group(1)
    检索该组的值


    (.*)
    中的
    表示您希望匹配是非贪婪的,否则后面的标点符号将包含在组中。

    您可以轻松为其构建正则表达式。使用java.util.regex包中的类可以轻松地为其构建正则表达式。使用java.util.regex包中的类我是java新手,因此对regex一无所知:(我不熟悉JAVA,所以不知道正则表达式。)(好吧,如果你只使用罗马/拉丁语。即使这样,这也可能取决于你的需要/目的,因为某些语言(如英语和法语)中的撇号可以构词,因此可能不会被视为“标点符号”在某些情况下。好吧,如果你只使用罗马/拉丁语。即使这样,也可能取决于你的需求/目的,因为某些语言(如英语和法语)中,撇号可以构成单词,因此在某些情况下可能不会被视为“标点符号”。