下面的代碼用於java中的標記化。我有一個小錯誤,我只是無法修復。這是關於文件標記。在此代碼中,如果用戶在文件中輸入四個大寫單詞。它不應該被標記,並且應該保留在同一行。如果沒有大寫字母或任何其他字符,其餘的詞必須標記。java中的文件標記化
例如
美利堅合衆國 您好我是沃爾特。
該O/P應該看起來像下面這樣。
美利堅合衆國
嗨
我
上午
沃爾特。
這是它的樣子。在我編寫代碼之後,我正面臨着一個小錯誤。 O/P顯示如此。
美利堅合衆國
美國
中美國
嗨
我
上午
Walt。
基本上我需要擺脫「美國國家」。在我正在檢查大寫字母的那段代碼中。你能幫我解決這個問題,因爲我只是無法解決這個問題嗎?任何事情都可能會有所幫助。
請隨時更改我的代碼並嘗試獲取我的輸出。
import java.io.*;
import java.util.*;
public class Tokenize {
public static void main (String[] args) {
try {
BufferedReader inputReader=new BufferedReader(new FileReader("C:/Users/Advait/Desktop/nlp_wikipedia.txt"));
String currentLine;
while ((currentLine = inputReader.readLine())!=null) {
// START STUDENT CODE
char atUpper;
char atUpper1;
int keeper = 1;
int keeper1 = 0;
String temp = "";
int j;
int i;
int counter = 0;
int m=0;
int n=0;
String temp1 = "";
boolean boolKeeper,boolKeeper1;
String Delimeter = "[\\s,:;'!?()\"]+";
for(j=0;j<(currentLine.length()-1);j++) {
if(currentLine.contains("://")) {
currentLine=currentLine.replace("://","#");
}
}
String token1[] = currentLine.split(Delimeter);
for(j=0;j<(token1.length)-1;j++) {
if(j>0) {
if(keeper==0) {
atUpper = token1[j+1].charAt(0);
atUpper1 = token1[keeper].charAt(0);
boolKeeper = Character.isUpperCase(atUpper);
boolKeeper1 = Character.isUpperCase(atUpper1);
if(boolKeeper==true && boolKeeper1==true) {
m++;
temp1 = token1[keeper].concat(" ").concat(token1[j+1]);
token1[keeper] = temp1;
}
} else {
i=j+1;
atUpper = token1[j].charAt(0);
atUpper1 = token1[i].charAt(0);
boolKeeper = Character.isUpperCase(atUpper);
boolKeeper1 = Character.isUpperCase(atUpper1);
if(boolKeeper==true && boolKeeper1==true) {
counter=counter+1;
if(counter == 1) {
keeper1 = j;
}
n++;
temp = token1[keeper1].concat(" ").concat(token1[i]);
token1[keeper1] = temp;
}
}
} else {
i=j+1;
atUpper = token1[j].charAt(0);
atUpper1 = token1[i].charAt(0);
boolKeeper = Character.isUpperCase(atUpper);
boolKeeper1 = Character.isUpperCase(atUpper1);
if(boolKeeper==true && boolKeeper1==true) {
keeper = 0;
m++;
temp = token1[j].concat(" ").concat(token1[i]);
token1[j] = temp;
}
}
ArrayList<String> LineList = new ArrayList<String>();
for (String token : token1) {
if (!token.equals("%")) {
LineList.add(token);
}
}
token1 = LineList.toArray(new String[LineList.size()]);
String token2 = token1[j];
for (int l=0;l<(token2.length()-1);l++) {
if(token2.charAt(l) == '-' && token2.charAt(l+1) == '\n') {
String token3[] = token2.split("-");
token1[j] = token3[0] + token3[1];
}
}
}
for(int k=0;k<(token1.length);k++) {
if(token1[k].contains(".") && token1[k].contains("@")) {
token1[k] = token1[k].replace(".", "*");
}
if(token1[k].contains("#") && token1[k].contains(".")) {
token1[k] = token1[k].replace("#","://");
token1[k] = token1[k].replace(".","*");
}
}
for(int k=0;k<(token1.length);k++) {
StringTokenizer st = new StringTokenizer(token1[k],".");
while (st.hasMoreTokens()) {
token1[k] = st.nextToken();
}
}
for(int k=0;k<(token1.length);k++) {
String token4 = token1[k];
for (int l=0;l<(token4.length()-1);l++) {
if(token4.contains("@") && token4.contains("*")) {
token1[k] = token4.replace("*",".");
}
if(token1[k].contains("://") && token1[k].contains("*")) {
token1[k] = token4.replace("*",".");
}
}
}
for(int k=0;k<(token1.length);k++) {
System.out.println(token1[k]);
}
// END STUDENT CODE
}
}
catch (IOException e) {
System.err.println("Caught IOException: "+e.getMessage());
}
}
}
因此,200多行代碼中的某個地方是我們應該查看的部分? – 2012-08-15 16:24:09
答案提示:這是家庭作業,它不適合提供完整的解決方案,只提示。 – 2012-08-15 16:26:06
將您的代碼集中到[Short,Self Contained,Correct(Compilable),Example](http://sscce.org/),我們需要解決這個問題。 – 2012-08-15 16:26:17