我可以知道如何循环以便我可以为文件中的所有单词(.txt)生成哈希码吗? 我已经能够为该文件生成单个哈希码。
给定循环读取并取出文本文档中的单词。 但是我无法循环生成哈希键。
public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
JFileChooser chooser=new JFileChooser();
int returnVal = chooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File f = chooser.getSelectedFile();
}
FileInputStream fin = new FileInputStream(chooser.getSelectedFile());
DataInputStream din = new DataInputStream(fin);
BufferedReader br = new BufferedReader(new InputStreamReader(din));
ArrayList<String> list = new ArrayList<String> ();
MessageDigest md = MessageDigest.getInstance("MD5");
String currentLine;
byte[] buf = new byte[8192];
int len = 0;
while ((currentLine = br.readLine()) != null) {
list.add(currentLine);
md.update(buf, 0, len);
System.out.println(currentLine);
}
br.close();
byte[] bytes = md.digest();
StringBuilder sb = new StringBuilder(2 * bytes.length);
for (byte b : bytes) {
sb.append("0123456789ABCDEF".charAt((b & 0xF0) >> 4));
sb.append("0123456789ABCDEF".charAt((b & 0x0F)));
}
String hex = sb.toString();
System.out.println (buf);
System.out.println(sb);
}
答案 0 :(得分:1)
按照以下步骤操作。
split
(空格)上获得\\s+
行。word.hashCode()
答案 1 :(得分:1)
尝试使用这样的标记器:
StreamTokenizer tokenizer = new StreamTokenizer(new FileReader("yourFilePath.txt"));
tokenizer.eolIsSignificant(false);
int token = tokenizer.nextToken();
while (token != StreamTokenizer.TT_EOF) {
if (token == StreamTokenizer.TT_WORD) {
System.err.println(tokenizer.sval.hashCode()); // here use any hash method you like
}
token = tokenizer.nextToken();
}
答案 2 :(得分:0)
您生成文件中所有行的列表,然后您似乎永远不会使用它。也许你应该通过在空格上分割每一行来生成文件中所有单词的列表;
for (String word : currentLine.split("\\s+")) {
list.add(word);
}
然后,您可以使用此列表为每个单词创建哈希列表;
List<byte[]> hashes = new ArrayList<byte[]>(list.size());
for (String word : list) {
md.reset();
hashes.add(md.digest(word));
}