令牌清理器 Java 方法

Token Cleaner Java Method

我正在做的 WordCount 项目需要一个 TokenCleaner 方法。标记是一系列被空格包围的字符,通常是一个单词,需要 "cleaned" 任何标点符号和大写字母。我有一个模板,但我不确定如何做或启动它。

public class TokenCleaner
{
    public static void main()
    {
        String[] tokens = {"That's","empty-handed?","42","...idk...","\"quote\""};
        for(int i = 0; i < tokens.length; i++)
        {
            System.out.println("Original:\t"+tokens[i]);
            System.out.println("Cleaned:\t"+cleanToken(tokens[i]));
        }
    }
private static String cleanToken(String token)
    {
        /** remove leading special characters and numbers **/
        // while the token's length is greater than zero AND the first character isn't a letter
            // remove the first character from the token
        /** remove trailing special characters and numbers **/
        // while the token's length is greater than zero AND the last character isn't a letter
            // remove the last character from the token
        // return a lowercase version of the token
        /** Note: It is possible for the cleaned token to be an empty String if the given token
            consisted of only non-letter characters */
        return null; // placeholder return statement
    }

有人可以帮忙吗?

谢谢

我不确定这是不是上面的要求,但是你可以有这样的方法:

private static String cleanToken(String token)
    {
        return token.replaceAll("\P{L}", "").toLowerCase();
    }

但这会从所有地方删除数字和特殊字符,而不仅仅是令牌的开头和结尾。

如果有帮助请告诉我。

I am not sure how to do or start it.

您可以通过模式匹配来实现。首先阅读 Pattern(实现 Java 正则表达式)和 String.replaceAll 方法的 javadoc。

或者,您可以创建一个新的(空的)StringBuilder,然后遍历原始字符串中的字符,将要保留的字符复制到 StringBuilder 中。完成后,从 StringBuilder.

创建一个 String

我不会为您提供相关 javadoc 的链接。找到它们、搜索它们以及阅读/理解它们是您需要学习的技能。

我建议您解析每个字符,如果它等于您要删除的任何字符,您可以将其删除,如果不是小写,例如:

private static String cleanToken(String token) {
// arraylist of new token
ArrayList<String> newtoken = new ArrayList<String>();
// arraylist of elements you wanna delete
ArrayList<String> todelete = new ArrayList<String>();
todelete.add("@"); // you can add all element u wanna delete
// parsing your token
for(int i=0 ; i < token.lentgh() ; i++ ) {
    if ( todelete.contains( token.charAt(i) ) ) {
        // you can delete it in the way you want
    }
    else {
        // lowercase it
        newtoken.add( (token.charAt(i)).toString().toLowerCase() ) ;
    }
}
// and now you can merge all elements of your newtoken list to one String
String NewToken = "";
for ( String t : newtoken ) {
     NewToken = NewToken + t ;
}
return NewToken;
}