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(“正则表达式”)
确定。因此,基本上,您希望在字符串中找到一些模式,并在模式匹配时执行操作
用简单的方式做这件事会很乏味。有效的解决方案可能包括以下内容
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)
检索该组的值
(.*)
中的?
表示您希望匹配是非贪婪的,否则后面的标点符号将包含在组中。您可以轻松为其构建正则表达式。使用java.util.regex包中的类我是java新手,因此对regex一无所知:(好吧,如果你只使用罗马/拉丁语。即使如此,这也可能取决于你的需求/目的,因为某些语言(如英语和法语)中,撇号可以构成单词,因此在某些情况下可能不会被视为“标点符号”。