我有一個.toUpperCase()
發生在一個緊密的循環中,並且已經進行了配置並顯示它正在影響應用程序的性能。令人討厭的是它已經被大寫字母命名了。我正在考慮將電話打到.toUpperCase()
,但這會讓我的代碼在未來的使用中變得不安全。Java可以跳過文本字符串常量上的.toUpperCase()大寫字母嗎?
到目前爲止,這個級別的Java性能優化已經超過了我的經驗。是否有任何方法進行預編譯,設置註釋等,以跳過已經大寫字符串的電話toUpperCase
?
我有一個.toUpperCase()
發生在一個緊密的循環中,並且已經進行了配置並顯示它正在影響應用程序的性能。令人討厭的是它已經被大寫字母命名了。我正在考慮將電話打到.toUpperCase()
,但這會讓我的代碼在未來的使用中變得不安全。Java可以跳過文本字符串常量上的.toUpperCase()大寫字母嗎?
到目前爲止,這個級別的Java性能優化已經超過了我的經驗。是否有任何方法進行預編譯,設置註釋等,以跳過已經大寫字符串的電話toUpperCase
?
如果可以的話,你需要做的就是對字符串調用.toUpperCase()一次,並存儲它,以便在循環時不必每次都做。
我不相信有一個預編譯的情況 - 你不能預先知道代碼將被處理的數據。如果有人能糾正我的話,那真是太棒了。
如果您發佈了一些示例代碼,我將能夠提供更多幫助 - 這取決於您在訪問循環之前對數據的訪問類型。如果您的循環實際上正在執行數據訪問(例如,從文件中讀取數據)並且無法控制這些文件的來源,那麼與數據硬編碼相比,您的循環會更加緊密。
任何許多情況下都有簡單的答案,但在某些情況下,您可以做的事情不多。您也可以嘗試equalsIgnoreCase
。它不會創建一個新的字符串。
你需要做一個if語句來處理這些字母。好的想法只是有條件。然後使用ascii代碼進行轉換,然後使用(int)進行轉換,然後找到大寫的ascii數字,我不知道它是什麼,然後繼續說如果ascii是真的,則忽略此部分,或者如果它對於一行中的特定字母然後暫時忽略它的charAt(I)
抱歉它是一個粗略的解釋
這需要檢查字符串中的大寫字符,大約是昂貴的。應該可以避免完全讀取字符串。 – djechlin
沒有使用註釋或預編譯,因爲你的輸入在運行時給出的註釋和預編譯的編譯,你不能這樣做時間建設。
如果您事先知道輸入,那麼在運行應用程序之前(即編譯應用程序之前),您可以簡單地將其轉換爲大寫。
請注意,有很多方法來優化字符串處理,但沒有更多的信息,我們不能給你任何定製的解決方案。
您可以編寫一個簡單的函數isUpperCase(字符串),並調用toUpperCase之前稱之爲():
if (!isUpperCase(s)) {
s = s.toUpperCase()
}
這可能是不顯著快,但至少這樣少的垃圾將被創建。如果輸入中的大部分字符串已經是大寫字母,這是非常有效的優化。
isUpperCase功能看起來大致是這樣的:
boolean isUpperCase(String s) {
for (int i = 0; i < s.length; i++) {
if (Character.isLowerCase(s.charAt(i)) {
return false;
}
}
return true;
}
我建議做上存儲的字符串。因此,無論該字符串來自哪裏,在啓動/首次檢索時/無論初始化階段如何工作,都將其轉換爲大寫。 – Taylor