java 尝试删除单词的所有非字母部分,但此行从标记化器中删除了整个单词“Have

ubof19bj  于 2023-01-29  发布在  Java
关注(0)|答案(4)|浏览(154)
while(tokenizer.hasMoreTokens()){
currentWord = tokenizer.nextToken();
String[] parts = currentWord.split(Pattern.quote("."));
String[] parts2 = parts[0].split(Pattern.quote(","));
String[] parts3 = parts2[0].split(Pattern.quote("?"));
String[] parts4 = parts3[0].split(Pattern.quote("\\.| "));
String[] parts5 = parts4[0].split("\"");
String[] parts6 = parts5[0].split(Pattern.quote(":"));

System.out.println(Arrays.toString(parts6));

我只是想把这段文字适当地分开,现在唯一的问题是这个词:
“有
此外,如果有人能提供一个解决方案,将所有这一切结合到一条线,这将是很好的,但我不能得到的工作,谢谢

uqjltbpv

uqjltbpv1#

试试这个。
\用于转义"","\"用于转义正则表达式特殊字符.""&"?"。我们将用空字符串替换其中的任何.,":"。

while(tokenizer.hasMoreTokens()){
        currentWord = tokenizer.nextToken();
        final String cleanWord = currentWord.replaceAll("[\\.,\":\\?]", "");
        System.out.println(cleanWord);
    }
8aqjt8rx

8aqjt8rx2#

API中有一些专门的类可以解析文本中的单词,下面就是其中之一:

import java.text.BreakIterator;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import java.nio.file.Files;
import java.nio.file.Paths;

public class WordCollector {

    public static void main(String[] args) {
        try {
            List<String> words = WordCollector.getWords(Files.lines(Paths.get(args[0])));
            System.out.println(words);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public static List<String> getWords(Stream<String> lines) {
        List<String> result = new ArrayList<>();
        BreakIterator boundary = BreakIterator.getWordInstance();
        lines.forEach(line -> {
            boundary.setText(line);

            int start = boundary.first();
            for (int end = boundary.next(); end != BreakIterator.DONE; start = end, end = boundary.next()) {
                String candidate = line.substring(start, end).replaceAll("\\p{Punct}", "").trim();
                if (candidate.length() > 0) {
                    result.add(candidate);
                }
            }
        });
        return result;
    }
}
cetgtptt

cetgtptt3#

如果你想在非字母上分割一行,这里有一种方法。
[^A-Za-z]+拆分一个或多个非字母

String line = "wordA, wordB; wordC;;; wordD, wordE!?+- !wordF??, !wordG!, wordH, wordI";
String[] words = line.split("[^A-Za-z]+");
for (String word : words) {
    System.out.println(word);
}

印刷品

wordA
wordB
wordC
wordD
wordE
wordF
wordG
wordH
wordI

另一方面,如果你想从一个单词中删除这些字符,使用类似的模式。不需要单独指定非字母字符。

String word = "C:om!>{}.p*u**te,;rs";
word = word.replaceAll("[^A-Za-z]","");
System.out.println(word);

印刷品

Computers
gkn4icbw

gkn4icbw4#

下面的代码显示了如何忽略所有非字母字符。

import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException {
        int c = 0;
        while((c=System.in.read())!=-1)
           if (('a' <= c && c <= 'z') || ('A' <= c && c <='Z')
              System.out.print((char)c);
    }
}

相关问题