gpt4 book ai didi

java - 如何将文本文件中的单词添加到我创建的数组中?

转载 作者:行者123 更新时间:2023-12-02 11:17:51 25 4
gpt4 key购买 nike

所以我有这个文本文件,其中有一堆单行单词,我想将它们添加到数组中。但不知何故,JUnit 测试总是失败。关于如何解决这个问题有什么想法吗?变量 numberOfWords 已被声明并赋值。

public void addWordsToArray(String fileName) {
loadWords(fileName);

String[] words = new String[numberOfWords];
for (int i = 0; i < numberOfWords; i++) {
words[i] = iter.next(); } }

-----完整文件如下。我还将分享测试-------------

public class Words {

ArrayList<String> wordList; // All the words
Iterator<String> iter; // iterator for the wordlist
int numberOfWords; // number of words in the file

String[] words; // this array holds your words

public Words() {
wordList = new ArrayList<>();
// iter = wordList.iterator();
}

/**
* This method loads the words from a given file
*
* @param fileName
* input file name
*/
private void loadWords(String fileName) {
wordList.clear();
numberOfWords = 0;
// This will reference one line at a time
String line = null;
int count = 0;
try {
// FileReader reads text files in the default encoding.
FileReader fileReader = new FileReader(fileName);

// Always wrap FileReader in BufferedReader.
BufferedReader bufferedReader = new BufferedReader(fileReader);

while ((line = bufferedReader.readLine()) != null) {
wordList.add(line.toLowerCase());
count++;
}

// Always close files.
bufferedReader.close();
numberOfWords = count;
iter = wordList.iterator();
} catch (FileNotFoundException ex) {
System.out.println("Unable to open file '" + fileName + "'");
} catch (IOException ex) {
System.out.println("Error reading file '" + fileName + "'");
}
}

public String getWord(int index) {
if (index < 0 || index >= numberOfWords) {
return null;
}
return words[index];
}

/**
* This method adds all the words to an array called words
*
* variable numberOfWords is already declared and has value and contains number
* of words
*
* @param fileName:
* input file name
*/
public void addWordsToArray(String fileName) {
loadWords(fileName); // DO NOT CHANGE

String[] words = new String[numberOfWords];
for (int i = 0; i < numberOfWords; i++) {
words[i] = iter.next();

// variable numberOfWords has the number of words
// TODO
// String[] words has been declared. Now instantiate the array to the words
// array size is equal to the number of words

}
// words = null;
// TO DO
/**
* Calling iter.next() will return the next word in the file. For examples
* String w = iter.next(); iter.next() always gives a next word
*/

// TO DO
// Add all word into the array words

}

/**
*
* @param word:
* input
* @return true if the given word exits in the words array. False otherwise
*/
public boolean contains(String word) {
for (String wordz : wordList) {
if (wordz.contains(word)) {
return true;
}
}
return false;
}

/**
*
* @param sentence:
* input sentence
* @return true if every word in the sentence exists in your words array. False
* otherwise.
*/
public boolean containsSentence(String sentence) {
String[] sp = sentence.split(" ");
for (String wordz : wordList) {
if (wordz.equals(sp)) {
return true;
}
}

return false;
}

/**
* reverse a sentence
*
* @param sentence:
* input sentence
* @return reversed sentence. For example: input: "i love you" return: "you love
* i" (hint: trim leading and trailing spaces")
*/
public String reverseSentence(String sentence) {
// if(sentence == null || sentence.length()==0) {
// return sentence;
// }
String[] sp = sentence.split(" ");
StringBuilder sb = new StringBuilder();
for (int i = sp.length - 1; i >= 0; i--) {
sb.append(sp[i]);
sb.append(" ");
}
return sb.toString().trim();

}

/**
*
* @param word:
* input word
* @return the number of occurrences of the word . If the word does not exist,
* return 0
*/
public int count(String word) {
int count = 0;
for (String wordz : wordList) {
if (wordz.equalsIgnoreCase(word)) {
count++;
// return count++;
}
}

return count;
}

/**
*
* @param word1:
* input word
* @param word2:
* input word
* @return true if all letters from word1 exist in word2, and all letters from
* word2 exist in word1.
*/
public boolean anagram(String word1, String word2) {
String sw1 = word1.replaceAll("\\s", "");

String sw2 = word2.replaceAll("\\s", "");
boolean check = true;
char[] w1 = sw1.toLowerCase().toCharArray();
char[] w2 = sw2.toLowerCase().toCharArray();
Arrays.sort(w1);
Arrays.sort(w2);

if (sw1.length() != sw2.length()) {
return false;
} else {
check = Arrays.equals(w1, w2);

}
if (check) {
return true;
} else

return false;

}

/**
*
*
* @param word:
* input word
* @param fileName:
* input file name
*
* PRINT all words that are the anagrams to the word input within
* words array
*
*/
public void findAnagram(String word, String fileName) {
addWordsToArray(fileName); // DO NOT CHANGE

}}

}

------测试是:------------

import static org.junit.Assert.*;

import java.io.ByteArrayOutputStream;
import java.io.File;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import words.Words;

public class PublicTests {

Words w;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
}

@Before
public void setUp() throws Exception {
w = new Words();
}

@After
public void tearDown() throws Exception {
}

@Test
public void testaddWordsToArray1() {
w.addWordsToArray("common_names.txt");
String result = w.getWord(4);
String expected = "william";
assertEquals(expected,result);
}

@Test
public void testaddWordsToArray2() {
w.addWordsToArray("names.txt");
String result = w.getWord(2);
String expected = "akbar";
assertEquals(expected,result);
}


@Test
public void testContains1() {
w.addWordsToArray("names.txt");
boolean result = w.contains("akbar");
assertTrue(result);
}


@Test
public void testContains2() {
w.addWordsToArray("names.txt");
boolean result = w.contains("administration");
assertFalse(result);
}


@Test
public void testContains3() {
w.addWordsToArray("1000words.txt");
boolean result = w.contains("administration");
assertTrue(result);
}


@Test
public void testContainsSentence1() {
w.addWordsToArray("1000words.txt");
boolean result = w.containsSentence("i buy book");
assertTrue(result);
}

@Test
public void testContainsSentence2() {
w.addWordsToArray("1000words.txt");
boolean result = w.containsSentence("i love you");
assertTrue(result);
}

@Test
public void testContainsSentence3() {
w.addWordsToArray("1000words.txt");
boolean result = w.containsSentence("she loves me");
assertFalse(result);
}


@Test
public void testReverseSentence1() {
String result = w.reverseSentence("i love you");
String expected = "you love i";
assertEquals(expected, result);
}

@Test
public void testReverseSentence2() {
String result = w.reverseSentence("maria");
String expected = "maria";
assertEquals(expected, result);
}

@Test
public void testReverseSentence3() {
String result = w.reverseSentence("cybertek school");
String expected = "school cybertek";
assertEquals(expected, result);
}


@Test
public void testCount1() {
w.addWordsToArray("test1.txt");
int result = w.count("abcd");
int expected = 2;
assertEquals(expected,result);
}

@Test
public void testCount2() {
w.addWordsToArray("test1.txt");
int result = w.count("bbcc");
int expected = 1;
assertEquals(expected,result);
}

@Test
public void testCount3() {
w.addWordsToArray("names.txt");
int result = w.count("trump");
int expected = 0;
assertEquals(expected,result);
}


@Test
public void testAnagram1() {
boolean result = w.anagram("abcd", "bcda");
assertTrue(result);
}
@Test
public void testAnagram2() {
boolean result = w.anagram("bbd", "ddb");
assertTrue(result);
}

@Test
public void testAnagram3() {
boolean result = w.anagram("abcd", "aadb");
assertFalse(result);
}


@Test
public void testFindAnagram1() throws Exception, Throwable{
runProgramWithInput("abcd", "test1.txt");
}


@Test
public void testFindAnagram2() throws Exception, Throwable{
runProgramWithInput("save", "1000words.txt");
}



/**
* Executes a run of the OrdersProcessor program by reading the data
* in the specified file using input redirection. The file inputFileName
* has the item's data file, whether multiple threads will be used,
* number of orders, base file name for the orders, and the
* result file name.
*
* @param inputFilename
* @throws Exception
* @throws Throwable
*/
private void runProgramWithInput(String word, String inputFilename) throws Exception, Throwable {

/* Retrieving the name of the results file */

String filename="";
int i = inputFilename.lastIndexOf('.');
if (i > 0) {
filename = inputFilename.substring(0,i);
}

String resultsFilename = filename + "_out.txt";
String officialResultsFilename = filename + "_expected.txt";

/* Deleting results file (in case it exists) */
File file = new File(resultsFilename);
file.delete();

/* Actual execution of the test by using input redirection and calling
/* OrdersProcessor.main(null) */
TestingSupport.redirectStandardInputTo(inputFilename);
ByteArrayOutputStream b = TestingSupport.redirectStandardOutputToByteArrayStream();

w.findAnagram(word, inputFilename);

String output = b.toString();
TestingSupport.writeToFile(resultsFilename, output);

/* Checking if we got the right results */
assertTrue(TestingSupport.sameContents(resultsFilename, officialResultsFilename));
}


}

-.------

最佳答案

正如@scigs 的评论所指出的,您在这里遗漏了很多内容。我假设您只是尝试将文件中的所有单词加载到一个数组中(并且每行一个单词)。您可以使用扫描仪来完成此操作:

Scanner scanner = new Scanner(new File(filename));
ArrayList<String> words = new ArrayList<>();
while (scanner.hasNextLine()) {
words.add(scanner.nextLine().trim());
}

您还可以将 Apache Commons commons-io 库用于其 IOUtils 类。 IOUtils.readLines() 方法的作用与上面的代码块的作用非常相似,但使用起来显然更方便/更紧凑:

List<String> words = IOUtils.readLines(new FileInputStream(filename));

关于java - 如何将文本文件中的单词添加到我创建的数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50161086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com