Java 判定标点符号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 判定标点符号相关的知识,希望对你有一定的参考价值。

题目:提取标点两侧文字
描述:将标点符号两侧文字提取出来形成新的文本。(如:本站提供的程序均为网上搜集,如果该程序涉及或侵害到您的版权请立即写信通知我们。提取后成:集如们)
希望能帮我写出个具体程序,谢谢
做一个对话框,可以导入一个文本文件,然后提取标点两侧文字开成一个新的文本,再导出文件。希望做出一个具体程序。

String str = "本站提!!,供的程序?均为网上搜集,如果该程序涉\"及或侵'害到" +
"您的,,版权请立即写信通知我们。";
str = str.replaceAll("[\\pP]", "-"); //正则表达式
String[] arr = str.split("-");
str = "";
for(int i=0; i<arr.length; i++)
String temp = arr[i];
if("".equals(temp)) continue;
if(i==0)
str += temp.substring(temp.length()-1,temp.length());
else
str += temp.substring(0,1)+temp.substring(temp.length()-1,temp.length());


System.out.println(str);

\pP 其中的小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。
大写 P 表示 Unicode 字符集七个字符属性之一:标点字符。
其他六个是
L:字母;
M:标记符号(一般不会单独出现);
Z:分隔符(比如空格、换行等);
S:符号(比如数学符号、货币符号等);
N:数字(比如阿拉伯数字、罗马数字等);
C:其他字符

希望对你有帮助追问

我要的是个对话框,能导入文本,再导出提取后的文本

追答

???不明白,你什么意思

参考技术A split
public String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。
该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。

例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:

Regex 结果
: "boo", "and", "foo"
o "b", "", ":and:f"

参数:
regex - 定界正则表达式
返回:
字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
抛出:
PatternSyntaxException - 如果正则表达式的语法无效
从以下版本开始:
1.4
另请参见:
Pattern

用这个函数可以实现你的功能哦,标点符号你可以写为正则表达式,,|.| 这种形式,表示逗号或句号,返回的是一个字符串数组,你对第一个字符串提取最后一个字符,用
substring这个函数可以实现如下
public String substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。
示例:

"unhappy".substring(2) returns "happy"
"Harbison".substring(3) returns "bison"
"emptiness".substring(9) returns "" (an empty string)

参数:
beginIndex - 起始索引(包括)。
返回:
指定的子字符串。
抛出:
IndexOutOfBoundsException - 如果 beginIndex 为负或大于此 String 对象的长度。
这写提取结果你可以放在一个string中 ,比如你定义一个srting a,后面提取一个 就a+=“先提取的”就可以了,最后这个a就是你要的结果

为啥 E(dfa) 是可判定语言?

【中文标题】为啥 E(dfa) 是可判定语言?【英文标题】:Why is E(dfa) a decidable language?为什么 E(dfa) 是可判定语言? 【发布时间】:2014-04-10 05:58:21 【问题描述】:

我不明白为什么图灵机 T,在没有标记接受状态时接受并在标记接受状态时拒绝:

E(dfa) = | A 是一个 DFA 并且 L(A) = 空集(没有符号)

E(dfa) 是一种可判定的语言。

证明:如果通过 > 沿着 DFA 的箭头移动从起始状态达到接受状态,则 DFA 接受某个字符串。为了测试这种情况,我们可以设计一个 >TM T,它使用类似于示例 3.23 中使用的标记算法。

T= "在 input 上,其中 A 是一个 DFA: 1.标记A的开始状态。 2. 重复直到没有新的状态被标记: 3. 标记任何有从任何状态进入它的转换的状态 已经标记。 4.如果没有标注accept状态,accept;否则,拒绝。”

这对我来说似乎倒退了。谁能解释一下?

谢谢。

【问题讨论】:

【参考方案1】:

我相信您的困惑是由于在不同的上下文中使用了“接受”和“拒绝”这两个词。在高层次上,很容易避免这种混淆,因为您可以将图灵机 T 定义为不引用 DFA A 自己接受的过程和拒绝。

L(T) 是 A | L(A) 为空。这与您的问题中定义的 E(dfa) 相同,但使用 L(T) 可以更明确地表明我们在这里处理两种不同的语言,一种恰好是用术语定义的另一个。

如果我们从高层到低层工作,我们可以说:

只要 L(A) 为空,L(T) 就接受 A。 但是我们如何判断 L(A) 是否为空呢?当 A 拒绝所有字符串时,L(A) 为空。 我们如何知道一个字符串在 A 中被拒绝了?它不会以接受状态结束。

我们现在也可以很容易地从低到高工作:

如果提供给 A 的字符串未以接受状态结束,则会被拒绝。 如果所有字符串都被 A 拒绝,则 L(A) 为空。 如果 L(A) 为空,则 L(T) 接受 A

现在你的证明更详细地说明了 T 如何决定是否接受 A,但我认为你的困惑更多地围绕着多重接受和拒绝的用法。从广义上讲,您可以说 T 接受 A 且当 A 拒绝所有内容。

【讨论】:

精彩的解释;谢谢

以上是关于Java 判定标点符号的主要内容,如果未能解决你的问题,请参考以下文章

判定(半)正定矩阵的特殊大于(等于)简写符号

判定Java程序员等级,HashMap就够了

华为OD机试真题Java实现英文输入法真题+解题思路+代码(2022&2023)

几何画板中直角符号为什么不带阴影

有符号与无符号数之间赋值的截断和扩展

去除文本中标点符号的java程序