2017-02-27 73 views
0

某個字符的量更換數字是否有可能取代數字與某個字符像'X'使用正則表達式的量的String? (即替換"test3something8""testXXXsomethingXXXXXXXX")?在字符串使用正則表達式一行代碼

我知道我可以使用for循環,但我正在尋找一種儘可能短的(正則表達式)單線解決方案(關於代碼高爾夫挑戰 - 是的,我意識到codegolf-SE,但這是一個普通的Java問題,而不是一個codegolf問題)。

  • 我知道如何與一個字符替換位數:
    String str = "test3something8".replaceAll("[1-9]", "X"); - >str = "testXsomethingX"
  • 我知道如何使用羣體,如果你想使用的匹配,或每場比賽後添加的東西,而不是取代的它:
    String str = "test3something8".replaceAll("([1-9])", "$1X"); - >str = "test3Xsomething8X"
  • 我知道如何創建n量有一定的性格:
    int n = 5; String str = new String(new char[n]).replace('\0', 'X'); - >str = "XXXXX"
  • 或者是這樣的:
    int n = 5; String str = String.format("%1$"+n+"s", "").replace(' ', 'X'); - >str = "XXXXX";

我想是這樣的(以下明顯的代碼不能正常工作,但它應該給什麼,我莫名其妙地想實現一個想法 - 最好甚至短了很多):

String str = "test3Xsomething8X" 
    .replaceAll("([1-9])", new String(new char[new Integer("$1")]).replace('\0', 'X'))); 
// Result I want it to have: str = "testXXXsomethingXXXXXXXX" 

正如我所說的,這上面不起作用,因爲「$ 1」應該被直接使用,所以現在它給人一種

java.lang.NumberFormatException:對於輸入字符串:「$ 1」


TL; DR:沒有人知道一個班輪在某個字符的量替換字符串中的一個數字?

+1

我個人的暗示:不是一切需要定期來解決表達式。一種跡象表明你不會去正則表達式:當你需要其他人來構建它們時。重點是:它將成爲你的代碼,所以你是負責維護/增強它的人。 – GhostCat

+0

@GhostCat我知道,除了一些驗證/格式化之外,我幾乎在實際生產代碼中使用正則表達式。但正如我在問題中提到的,這主要是針對代碼高爾夫挑戰(對於每個人的信息:代碼高爾夫正在儘可能少的字節中解決一定的挑戰)。對於硬編碼或最終使用for循環來說,它可能會更短,但是當我正在進行挑戰時,我主要感興趣的是看到它甚至可以用一行代碼替換具有某個特定字符的數字(因此這個問題)。它比實際使用更出於好奇。 –

+1

然後我會建議你在這裏試試你的運氣:http://codegolf.stackexchange.com/ – GhostCat

回答

0

如果你真的想把它作爲一個單線。一個可能的解決方案(更多地將其視爲PoC)可以使用Stream API。

String input = "test3something8"; 
input.chars() 
    .mapToObj(
     i -> i >= '0' && i <= '9' ? 
      new String(new char[i-'0']).replace('\0', 'X') 
      : "" + ((char)i) 
    ) 
    .forEach(System.out::print); 

輸出

testXXXsomethingXXXXXXXX 

沒有調查已經做了性能,可擴展性,是GC友好等

+0

如果數字大於9,那麼怎麼辦? 'String input =「test30something18」; ' –

+0

@Nanangarsyad最初的請求是'替換**數字**在字符串'不是數字。我的答案僅僅是爲了實現'有人知道一行'的要求。如果您想用相同數量的替換字符替換字符串中的數字,您應該尋找更適合您的問題的解決方案。如果SO上沒有相關的答案可以解決您的問題,您可以提出一個新問題。 – SubOptimal

相關問題