我的代码运行了 15 分钟但只有白色输出?
my code runs for 15mins but only white output?
我正在做数据清理的停用词代码。我遵循了 YouTube 上的教程:https://www.youtube.com/watch?v=ckQUlI7x7hI 他的代码可以工作并显示输出,但我的没有
我正在使用英文停用词,我的停用词示例是 "a"、"an"、"away"、"keeps"。输入将为 "An apple a day keeps the doctor away" 输出应为 "apple day the doctor".
这是我的文件的内容:https://ufile.io/gikev
代码如下:
import java.io.FileInputStream;
import java.util.ArrayList;
public class DataCleaning {
public static void main(String[] args) {
ArrayList sw = new ArrayList<>();
try{
FileInputStream x = new FileInputStream("/Users/Dan/Desktop/DATA/stopwords.txt");
byte b[] = new byte[x.available()];
x.read(b);
x.close();
String data[] = new String(b).split("\n");
for(int i = 0; i < data.length; i++)
{
sw.add(data[i].trim());
}
FileInputStream xx = new FileInputStream("/Users/Dan/Desktop/DATA/cleandata.txt");
byte bb[] = new byte[xx.available()];
xx.read(bb);
xx.close();
String dataa[] = new String(bb).split("\n");
for(int i = 0; i < dataa.length; i++)
{
String file = "";
String s[] = dataa[i].split("\s");
for(int j = 0; j < s.length; i++)
{
if(sw.contains(s[j].trim().toLowerCase()))
{
file=file + s[j] + " ";
}
}
System.out.println(file + "\n");
}
} catch(Exception a){
a.printStackTrace();
}
}
}
当我 运行 挖矿时,它只会这样做:
我该怎么办?
您的代码存在 3 个问题:
因此您在最内层循环中递增了错误的变量
导致无限循环,因为 j
总是小于
s.length
而你永远不会递增 j
。更改此行:
for (int j = 0; j < s.length; i++) {
到
for (int j = 0; j < s.length; j++) {
要打印不是停用词的单词,您需要否定您的if
条件如下:
if (!sw.contains(s[j].trim().toLowerCase()))
此外,确保文件 stopwords.txt
由 \n
(new
线),因为你是根据它拆分的,而不是像
您共享的 link 中的文件。
我建议您缩进代码并使用有意义的名称来命名变量。这样调试问题会简单很多
我正在做数据清理的停用词代码。我遵循了 YouTube 上的教程:https://www.youtube.com/watch?v=ckQUlI7x7hI 他的代码可以工作并显示输出,但我的没有
我正在使用英文停用词,我的停用词示例是 "a"、"an"、"away"、"keeps"。输入将为 "An apple a day keeps the doctor away" 输出应为 "apple day the doctor".
这是我的文件的内容:https://ufile.io/gikev
代码如下:
import java.io.FileInputStream;
import java.util.ArrayList;
public class DataCleaning {
public static void main(String[] args) {
ArrayList sw = new ArrayList<>();
try{
FileInputStream x = new FileInputStream("/Users/Dan/Desktop/DATA/stopwords.txt");
byte b[] = new byte[x.available()];
x.read(b);
x.close();
String data[] = new String(b).split("\n");
for(int i = 0; i < data.length; i++)
{
sw.add(data[i].trim());
}
FileInputStream xx = new FileInputStream("/Users/Dan/Desktop/DATA/cleandata.txt");
byte bb[] = new byte[xx.available()];
xx.read(bb);
xx.close();
String dataa[] = new String(bb).split("\n");
for(int i = 0; i < dataa.length; i++)
{
String file = "";
String s[] = dataa[i].split("\s");
for(int j = 0; j < s.length; i++)
{
if(sw.contains(s[j].trim().toLowerCase()))
{
file=file + s[j] + " ";
}
}
System.out.println(file + "\n");
}
} catch(Exception a){
a.printStackTrace();
}
}
}
当我 运行 挖矿时,它只会这样做:
我该怎么办?
您的代码存在 3 个问题:
因此您在最内层循环中递增了错误的变量
导致无限循环,因为j
总是小于
s.length
而你永远不会递增j
。更改此行:for (int j = 0; j < s.length; i++) {
到
for (int j = 0; j < s.length; j++) {
要打印不是停用词的单词,您需要否定您的
if
条件如下:if (!sw.contains(s[j].trim().toLowerCase()))
此外,确保文件
stopwords.txt
由\n
(new 线),因为你是根据它拆分的,而不是像 您共享的 link 中的文件。
我建议您缩进代码并使用有意义的名称来命名变量。这样调试问题会简单很多