2012-10-27 48 views
2

所以我正在研究一個項目,由於某些原因僅限於java squawk 1.4。因此,String類不包含標題中的四種方法。我需要在我的程序中使用這些方法,並得出結論,我必須製作一個Util類,它自己執行這些方法的功能。這樣做是空的,拆分,包含和手動替換

首先,這是否存在某處?顯然,我的第一反應是考慮從String類中複製源代碼,但這些方法的依賴性對我來說太深了,無法使用。

其次,我很難複製split(String regex)replace(CharSequence target, CharSequence replacement)的行爲。 contains(String)isEmpty()顯然很容易,但我遇到了編碼其他問題的麻煩。

現在,我有split工作(雖然它的工作方式不同於jdk 7,但我不想要bug)。

public static String[] split(String string, char split) { 
    String[] s = new String[0]; 
    int count = 0; 
    for (int x = 0; x < string.length(); x++) { 
     if (string.charAt(x) == split) { 
      String[] tmp = s; 
      s = new String[++count]; 
      System.arraycopy(tmp, 0, s, 0, tmp.length); 
      s[count - 1] = string.substring(x).substring(1); 
      if (contains(s[count - 1], split + "")) { 
       s[count - 1] = s[count - 1].substring(0, s[count - 1].indexOf(split)); 
      } 
     } 
    } 
    return s.length == 0 ? new String[]{string} : s; 
} 

Replace要難得多了,我一直在努力幾個小時。這似乎是谷歌/檔案從未冒險的問題。

+0

'String.split(字符串正則表達式)'存在於Java 1.4的...你確定你需要重新實現它? (誠​​然,我對Squawk一無所知。) –

+0

@JonSkeet是的,我正在使用一種稱爲sun squawk的東西,它不存在於String類中。 –

+0

你能夠提供*是*的可用參考嗎?如果它不是簡單地匹配JDK版本,那麼將很難提供替代實現... –

回答

0

製造方法...

public static boolean isEmpty(String string) { 
    return string.length() == 0; 
} 

public static String[] split(String string, char split) { 
    return _split(new String[0], string, split); 
} 

private static String[] _split(String[] current, String string, char split) { 
    if (isEmpty(string)) { 
     return current; 
    } 
    String[] tmp = current; 
    current = new String[tmp.length + 1]; 
    System.arraycopy(tmp, 0, current, 0, tmp.length); 
    if (contains(string, split + "")) { 
     current[current.length - 1] = string.substring(0, string.indexOf(split)); 
     string = string.substring(string.indexOf(split) + 1); 
    } else { 
     current[current.length - 1] = string; 
     string = ""; 
    } 
    return _split(current, string, split); 
} 

public static boolean contains(String string, String contains) { 
    return string.indexOf(contains) > -1; 
} 

public static String replace(String string, char replace, String replacement) { 
    String[] s = split(string, replace); 

    String tmp = ""; 
    for (int x = 0; x < s.length; x++) { 
     if (contains(s[x], replace + "")) { 
      tmp += s[x].substring(1); 
     } else { 
      tmp += s[x]; 
     } 
    } 
    return tmp; 
}