解析數據我在下面的方式哈希表的數據:需要一個Hashtable
key : year value : 2011 2011
key : title value : Almayer's Folly Faust
我有兩個鍵和標籤空格分隔值。
我需要以下列方式輸出我的輸出。
Year Title
2011 Almayer's Folly
2011 Faust
我如何解析哈希表中的數據以所需的方式?
解析數據我在下面的方式哈希表的數據:需要一個Hashtable
key : year value : 2011 2011
key : title value : Almayer's Folly Faust
我有兩個鍵和標籤空格分隔值。
我需要以下列方式輸出我的輸出。
Year Title
2011 Almayer's Folly
2011 Faust
我如何解析哈希表中的數據以所需的方式?
這對我的作品,但你必須有每年爲每個標題
Hashtable<String, String> map = new Hashtable<String, String>();
map.put("Year", "2011 2011");
map.put("Title", "Almayer's Folly Faust");
String[] rows = null;
for (String key : map.keySet()) {
String value = map.get(key);
String[] elements = value.split("\t");
if (rows == null) {
rows = new String[elements.length + 1]; // Element rows + Title row
for (int i = 0; i < rows.length; i++) {
rows[i] = "";
}
}
String prefix = "";
if (!rows[0].equals("")) { // On first append no tab
prefix = "\t";
}
rows[0] += prefix + key; // append Title
for (int i = 1; i < rows.length; i++) {
rows[i] += prefix + elements[i - 1]; // Append Data
}
}
for (String row : rows) {
System.out.println(row);
}
輸出一個標題和一個年:
Year Title
2011 Almayer's Folly
2011 Faust
+0祝賀別人的作業,而不會挑戰OP做出努力。 – maasg
這是很簡單的,你可以遍歷使用一組密鑰的哈希表:
System.out.println("Year\tTitle");
keys = table.keySet();
for (String key : keys)
System.out.println(key + "\t" + table.get(key);
假設今年是一個字符串。
當然,這只是問題的一半。獲得密鑰後,使用該密鑰獲取字符串值,然後使用該選項卡作爲分隔符來解析字符串。 – Tony
首先,您的方法是管理這種結構的一種非常脆弱的方式。至少你應該讓這些值成爲某種List。我懷疑這是某種你想解決的練習/家庭作業問題。
這就是說我會用僞代碼的方式擴展pb2q的回答與託尼的評論。
結構中的選項卡對於您所需的輸出沒有用處,所以它們只會用作分隔符。
System.out.println("Year\tTitle");
keys = table.keySet();
Map<Scanner> scanners = new Map<Scanner>();
for (String key : keys){
// Here comes the trick
scanners[i] = new Scanner(table.get(key)).useDelimiter("\t");
}
-Print headings.
//Now you can pull elements from each scanner until they are empty.
boolean hasMoreElements = true;
while(hasMoreElements){
for (key : keys){
print scanners[key].next()
}
printLine
hasMoreElements = scanners[key].hasNext()
}
頭上的方法,使用原始數據與令人驚訝的有用的掃描儀。
您的存儲數據的方法非常糟糕。在你的桌子上,你基本上表明你將會用2011年作爲你的鑰匙......這樣做!
另一個問題是,您不應該使用地圖中的選項卡來分隔不同的數據。更合理的一種更簡單的方法是將製表符分隔的數據存儲在列表中,而不使用製表符。
以下是您正在嘗試執行的操作,顯示您可以在將東西添加到地圖之前或之後將其添加到列表中。
HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
ArrayList<String> titles2011 = new ArrayList<String>();
titles2011.add("Almayer's Folly");
map.put("2011", titles2011);
map.get("2011").add("Faust");
System.out.println("Year\tTitle");
for (String year : map.keySet()) {
for (String title : map.get(year)) {
System.out.println(year+"\t"+title);
}
}
我還建議閱讀的java.util.map和java.util.HashMap的開端。除了查找hash table的用途以及更具體地說,如何處理碰撞(一旦學習瞭如何正確使用哈希表,您將會遇到)。
家庭作業?如果是這樣,你應該這樣標記它。另外,你到目前爲止嘗試過什麼,以及你面臨什麼問題? – maasg