简体   繁体   中英

Where and how to implement the delimiter in my code?

I made in program which is able to read a file and prints a list of all the different words. However, I want to remove all the commas and other characters at the beginning and end of the words using the delimiter. However, I just don't get how to build the it the right way and where to put it in my code. Can somebody give me an explanation of where and how to correctly implement it?

package nl.ru.ai.SjoerdSam.exercise7;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Concordances
{

  final static int MAX_NR_OF_WORDS=20000;
  public static void main(String[] args) throws FileNotFoundException
  {
    try
    {
      String[] words=new String[MAX_NR_OF_WORDS];
      int[] freqs=new int[MAX_NR_OF_WORDS];
      boolean terminate=true;
      Scanner scanner=openTextFile();
      int nr=findAndCountWords(scanner,words,freqs);
      while(terminate)
      {
        Scanner input=new Scanner(System.in);
        System.out.println("Please enter 'read' to start reading a file and display number of words read, "+"'content' to display content (all currently stored words in the order of apperance), "+"'stop' to stop the program or "+"'count'+ the word you want to count to count the number of occurences of a word, "+"the total number of words and the percantage of occurences.");
        String command=input.nextLine();

        switch(command)
        {
          case "read":
            System.out.println("The number of words in this file is"+nr);
            break;
          case "content":
            displayWords(nr,words,freqs);
            break;
          case "stop":
            terminate=false;
            System.out.println("Program terminated");
            break;
          case "count":
            // Bit stuck here on how to do the count and show the frequency of a single word. if i would actually get the frequency the percentage could be found by dividing the frequency with total number of words found above
            Scanner single=new Scanner(System.in);
            System.out.println("Please type in the word you want to know data of");
            String word=single.nextLine();
            findAndCountWord(scanner,words,word);
            System.out.println("The frequency for the word"+" "+single+" "+"is"+findAndCountWord(single,words,word));
            break;

        }
      }
    }
    catch(IllegalArgumentException e)
    {
      System.out.print(e);
    }
  }
  static Scanner openTextFile() throws FileNotFoundException
  {
    assert (true);
    Scanner input=new Scanner(System.in);
    System.out.println("Please enter file name: ");
    String fileName=input.nextLine();
    FileInputStream inputStream=new FileInputStream(fileName);
    return new Scanner(inputStream);
  }
  static int findAndCountWords(Scanner scanner, String[] words, int[] freqs)
  {
    assert words!=null&&freqs!=null;
    int nr=0;
    while(scanner.hasNext())
    {
      String word=scanner.next();
      if(updateWord(word,words,freqs,nr))
        nr++;
    }
    return nr;
  }
  static boolean updateWord(String word, String[] words, int[] freqs, int nr)
  {
    assert nr>=0&&words!=null&&freqs!=null;
    int pos=sequentialSearch(words,0,nr,word);
    if(pos<nr)
    {
      freqs[pos]++;
      return false;
    } else
    {
      words[pos]=word;
      freqs[pos]=1;
      return true;
    }
  }
  static int sequentialSearch(String[] array, int from, int to, String searchValue)
  {
    assert 0<=from&&0<=to : "Invalidbounds";
    assert array!=null : "Array shouldbeinitialized";
    if(from>to)
      return to;
    int position=from;
    while(position<to&&(!array[position].equals(searchValue)))
      position++;
    return position;
  }
  static void displayFrequencies(int nr, String[] words, int[] freqs)
  {
    assert nr>=0&&words!=null&&freqs!=null;

    for(int i=0;i<nr;i++)
    {
      System.out.println(words[i]+" "+freqs[i]);
    }
  }
  static void displayWords(int nr, String[] words, int[] freqs)
  {
    assert nr>=0&&words!=null&&freqs!=null;

    for(int i=0;i<nr;i++)
    {
      System.out.println(words[i]);
    }
  }

  static int findAndCountWord(Scanner scanner, String[] words, String word)
  {
    assert words!=null;
    int wordCount=0;
    while(scanner.hasNext())
    {
      for(int i=0;i<words.length;i++)
      {
        if(word.equals(words[i]))
        {
          wordCount++;
        }
      }
    }
    return wordCount;
  }
}

Output example at the moment:

U.S.
state's
laws.
principal
office
4557
Melan
Dr.
S.
Fairbanks,
AK,
99712.,
scattered
throughout
numerous
locations.
809
North
1500
West,
Salt
Lake
City,
UT
84116,
(801)
596-1887,
email
business@pglaf.org.
Email
contact
information
http://pglaf.org
information:
Gregory
B.
Newby
Chief
Executive
Director
gbnewby@pglaf.org
4.
Donations

It's not the prettiest but it should work.

String str = "!!!!@word's!@#";
String temp = "";
boolean done = false;
for (int i = 0; i < str.length(); i++) {
    char currentChar = str.charAt(i);
    if (Character.isLetter(currentChar) && !done) {
        done = true;
        temp += currentChar;
    } else if (done) {
        temp += currentChar;
    }
}

str = "";
done = false;
for (int i = temp.length() - 1; i >= 0; i--) {
    char currentChar = temp.charAt(i);
    if (Character.isLetter(currentChar) && !done) {
        str += currentChar;
        done = true;
    } else if (done) {
        str += currentChar;
    }
}
StringBuilder sb = new StringBuilder(str);

str = sb.reverse().toString();
System.out.println(str);

output is word's

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM