У меня есть назначение для изменения программы из моего учебника. Программа берет строку ввода от пользователя, а затем отвечает, сколько слов было введено. Мое задание - изменить это, чтобы вместо символа слова использовать число символов. У меня это нормально работает, но я получаю ведущее место в массиве, когда я использую .split для tokenize символов, может кто-нибудь объяснить, почему?Ведущее пространство при использовании .split
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
/**
*
* @author Frank
*/
public class LetterCounting
{
public static void main(String[] args)
{
// create HashMap to store String keys and Integer values
Map< String, Integer > myMap = new HashMap< String, Integer >();
createMap(myMap); // create map based on user input
displayMap(myMap); // display map content
} // end main
// create map from user input
private static void createMap(Map< String, Integer > map)
{
Scanner scanner = new Scanner(System.in); // create scanner
System.out.println("Enter a string:"); // prompt for user input
String input = scanner.nextLine();
// tokenize the input
String letters = input.replaceAll("\\s", "");
String[] tokens = letters.split("");
// processing input text
for (String token : tokens)
{
String word = token.toLowerCase(); // get lowercase word
// if the map contains the word
if (map.containsKey(word)) // is word in map
{
int count = map.get(word); // get current count
map.put(word, count + 1); // increment count
} // end if
else
map.put(word, 1); // add new word with a count of 1 to map
} // end for
} // end method createMap
// display map content
private static void displayMap(Map< String, Integer > map)
{
Set<String> keys = map.keySet(); // get keys
// sort keys
TreeSet<String> sortedKeys = new TreeSet<String>(keys);
System.out.println("\nMap contains:\nKey\t\tValue");
// generate output for each key in map
for (String key : sortedKeys)
System.out.printf("%-10s%10s\n", key, map.get(key));
System.out.printf(
"\nsize: %d\nisEmpty: %b\n", map.size(), map.isEmpty());
} // end method displayMap
} // end class WordTypeCount
У меня есть снимок экрана из dubug данных NetBeans, но у меня не хватает репутации, чтобы разместить его. Если кто-то хочет это увидеть, дайте мне знать, и я могу отправить его вам.
Заранее благодарим за ввод.
Frank
Вы можете использовать ['.trim()'] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()), чтобы избавиться от ведущих или завершающие пробелы. – Baz
Почему вы не разбиваете на пробелы, чтобы подсчитать слова: 'String [] tokens = letters.split (" \\ s ");' (без строки 'replaceAll')? – assylias
Baz - я могу попробовать .trim(), но после того, как я использую .replaceAll, нет пробелов, но когда я тогда использую .split, ведущее пространство помещает массив в индекс 0. – fmarabate