본인의 텍스트 북에서 프로그램을 수정할 수있는 권한이 있습니다. 이 프로그램은 사용자로부터 입력 문자열을받은 다음 몇 단어가 입력되었는지 응답합니다. 나의 임무는 이것을 바꾸어 단어 수 대신 문자 수를 계산하는 것이다. 이 잘 작동하지만 배열에 선행 공백을 사용하여 .split을 사용하여 문자를 토큰 화하면 다른 사람이 이유를 설명 할 수 있습니까?.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
netbeans의 dubug 데이터를 캡처 한 화면이 있지만 게시하기에 충분한 평판이 없습니다. 누군가가보고 싶다면 알려주세요. 나는 그것을 당신에게 보낼 수 있습니다.
미리 감사드립니다.
프랭크
는
['.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