簡體   English   中英

Japid:從HashMap獲取鍵值時的奇怪行為

[英]Japid: Strange behavior when getting value of a key from HashMap

<p> THAT'S OK: ${((Map<String,Integer>)view.get("upgrade_assignment_type_map")).toString()} </p>

<p> THAT'S ALSO OK:
for( String _name : ((Map<String, Integer>)view.get("upgrade_assignment_type_map")).keySet() ) {
<p> ${_name}: ${((Map<String, Integer>)view.get("upgrade_assignment_type_map")).get(_name)} </p>
}
</p>
<br><br>
<p> SADLY THAT'S NOT OK::: ${((Map<String, Integer>)view.get("upgrade_assignment_type_map")).get("MANUAL")} </p>

上面的代碼段輸出以下輸出,這對我來說是令人驚訝的:

THAT'S OK: {AUTO_WITH_BALANCE_EMPHASIS=2, AUTO_WITH_OFFENSIVE_EMPHASIS=0, MANUAL=3, AUTO_WITH_DEFENSIVE_EMPHASIS=1}

THAT'S ALSO OK:

AUTO_WITH_BALANCE_EMPHASIS: 2

AUTO_WITH_OFFENSIVE_EMPHASIS: 0

MANUAL: 3

AUTO_WITH_DEFENSIVE_EMPHASIS: 1



SADLY THAT'S NOT OK:::

代碼段的最后一行嘗試獲取鍵“ MANUAL”的值,但它沒有打印該值,並且如果我嘗試將其轉換為toString(例如${((Map<String, Integer>)view.get("upgrade_assignment_type_map")).get("MANUAL").toString()} ),它在運行時為我提供了null。 我不明白為什么會這樣?

當我打印長度時(第一個冒號<p> ${_name}: ${_name.length()} : ${((Map<String, Integer>)view.get("upgrade_assignment_type_map")).get(_name)} </p> )中得到的每個鍵:

AUTO_WITH_BALANCE_EMPHASIS: 29 : 2

AUTO_WITH_OFFENSIVE_EMPHASIS: 29 : 0

MANUAL: 10 : 3

AUTO_WITH_DEFENSIVE_EMPHASIS: 30 : 1

注意:我正在Java源內創建Map作為Map<String, Integer> nameToTypeMap = Maps.newHashMap();

我懷疑“ MANUAL”條目中的某個地方有無法打印的字符。 更改您的工作路線之一,如下所示:

<p> KEY_LENGTHS:
for( String _name : ((Map<String, Integer>)view.get("upgrade_assignment_type_map")).keySet() ) {
<p> ${_name}: ${_name.length()}</p>
</p>

如果顯示的MANUAL長度不是6,則表明我是對的,您應該查看數據源以找出多余字符來自何處。

如果沒有,我至少會嘗試在HTML部分之外進行調試。 我沒有使用過Play框架,但是大概必須有一些代碼可以填充此視圖...如果您可以在那里闖入調試器,則可能會使診斷變得更加容易。

另一個可能性是該條目包含一個非ASCII字符, 看起來像一個ASCII字符,但實際上不是。 如果您查看HTML的源代碼,則可能會看到它(甚至可能是不可打印的字符,具體取決於它的處理方式)。

Eclipse並未顯示無效字符,並且這些字符串中存在無效字符(令人驚訝地可編譯),因此當我在vim中打開該特定文件時,它顯示了我並刪除了那些無效字符。 那解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM