java中的英文字符怎么表示什么意思,如何确定字符串是英语还是Java代码?

考虑以下两个字符串:

1. for (int i = 0; i < b.size(); i++) {

2.do something in English (not necessary to be a sentence).

第一个是Java代码,第二个是英语。如何检测第一个是代码,第二个是英语?

5c2234a3c465968f7e8d277f4de9e167.png

Java代码可能不是可解析的,因为它不是完整的方法/语句/表达式。以下提供了针对此问题的解决方案。有时,代码和英语之间没有清晰的界线,准确性不能达到100%。但是,使用下面的解决方案,您可以轻松地调整程序以适合您的需求。

基本思想是将字符串转换为一组标记。例如,上面的代码行可能变成“ KEY,SEPARATOR,ID,ASSIGN,NUMBER,SEPARATOR,...”。然后我们可以使用简单的规则将代码与英语分开。

标记器类将字符串转换为标记列表。

packagelexical;

importjava.util.LinkedList;import java.util.regex.Matcher;import java.util.regex.Pattern;

publicclassTokenizer {

privateclassTokenInfo {

publicfinalPattern regex;

publicfinalinttoken;

publicTokenInfo(Pattern regex, int token) {

super();

this.regex = regex;

this.token = token;

}

}

publicclassToken {

publicfinalinttoken;

publicfinalString sequence;

publicToken(int token, String sequence) {

super();

this.token = token;

this.sequence = sequence;

}

}

privateLinkedList tokenInfos;

privateLinkedList tokens;

publicTokenizer() {

tokenInfos = newLinkedList();

tokens = newLinkedList();

}

publicvoidadd(String regex, int token) {

tokenInfos

.add(newTokenInfo(Pattern.compile("^(" + regex + ")"), token));

}

publicvoidtokenize(String str) {

String s = str.trim();

tokens.clear();

while(!s.equals("")) {

//System.out.println(s);

booleanmatch = false;

for(TokenInfo info : tokenInfos) {

Matcher m = info.regex.matcher(s);

if(m.find()) {

match = true;

String tok = m.group().trim();

s = m.replaceFirst("").trim();

tokens.add(newToken(info.token, tok));

break;

}

}

if(!match){

//throw new ParserException("Unexpected character in input: " + s);

tokens.clear();

System.out.println("Unexpected character in input: " + s);

return;

}

}

}

publicLinkedList getTokens() {

returntokens;

}

publicString getTokensString() {

StringBuilder sb = newStringBuilder();

for(Tokenizer.Token tok : tokens) {

sb.append(tok.token);

}

returnsb.toString();

}}

我们可以获得Java关键字,分隔符,运算符,标识符等。如果将映射值分配给标记,则可以将英语字符串转换为标记字符串。

packagelexical;

importgreenblocks.javaapiexamples.DB;import java.io.IOException;import java.sql.ResultSet;import java.sql.SQLException;import java.util.regex.Matcher;import java.util.regex.Pattern;

importorg.apache.commons.lang.StringUtils;

importNLP.POSTagger;

publicclassEnglishOrCode {

privatestaticTokenizer tokenizer = null;

publicstaticvoidinitializeTokenizer() {

tokenizer = newTokenizer();

//key words

String keyString = "abstract assert boolean break byte case catch "

+ "char class const continue default do double else enum"

+ " extends false final finally float for goto if implements "

+ "import instanceof int interface long native new null "

+ "package private protected public return short static "

+ "strictfp super switch synchronized this throw throws true "

+ "transient try void volatile while todo";

String[] keys = keyString.split(" ");

String keyStr = StringUtils.join(keys, "|");

tokenizer.add(keyStr, 1);

tokenizer.add("\\(|\\)|\\{|\\}|\\[|\\]|;|,|\\.|=|>|

+ "\\?|:|==|<=|>=|!=|&&|\\|\\||\\+\\+|--|"

+ "\\+|-|\\*|/|&|\\||\\^|%|\'|\"|\n|\r|\\$|\\#",

2);//separators, operators, etc

tokenizer.add("[0-9]+", 3); //number

tokenizer.add("[a-zA-Z][a-zA-Z0-9_]*", 4);//identifier

tokenizer.add("@", 4);

}

publicstaticvoidmain(String[] args) throws SQLException, ClassNotFoundException, IOException {

initializeTokenizer();

String s = "do something in English";

if(isEnglish(s)){

System.out.println("English");

}else{

System.out.println("Java Code");

}

s = "for (int i = 0; i < b.size(); i++) {";

if(isEnglish(s)){

System.out.println("English");

}else{

System.out.println("Java Code");

}

}

privatestaticbooleanisEnglish(String replaced) {

tokenizer.tokenize(replaced);

String patternString = tokenizer.getTokensString();

if(patternString.matches(".*444.*") || patternString.matches("4+")){

returntrue;

}else{

returnfalse;

}

}}

输出:

English

Java Code

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

031ce77115e5fdbb98cf8105c8ec0155.png

d4dec00c5b0be244a0d0bf1a284f1477.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值