我試圖找出一種安全地用其他字符串替換字符串中整數的方法。 基本上輸入將是一個字符串,比如說「1或2和3」。然後我會得到一個字符串列表。在這種情況下,它將是一個3個字符串的列表。例如,「名稱= 1」,「名稱= 2」和「名稱= 3」。在java中替換字符串中的數字
然後我需要用字符串替換整數。
下面是一個例子:
import java.text.MessageFormat;
public class TestStringBuilder
{
public static void main(String[] args)
{
TestStringBuilder builder = new TestStringBuilder();
String output;
String[] filters = { "Name = 1", "Name = 2", "Name = 3" };
output = builder.buildString(filters);
System.out.println(output);
output = builder.formatString(filters);
System.out.println(output);
System.out.println();
/* Now swap around first two strings */
String[] filters2 = { "Name = 2", "Name = 1", "Name = 3" };
output = builder.buildString(filters2);
System.out.println(output);
output = builder.formatString(filters2);
System.out.println(output);
}
private String formatString(Object[] filters)
{
/* Wrap integers in {} here first */
String advanced = "{1} OR {2} OR {1}";
return MessageFormat.format(advanced, filters);
}
private String buildString(String[] filters)
{
String advanced = "1 OR 2 OR 1";
/*
* Now replace the numbers with the actual filters in human readable
* form. Note: We loop from 10 to 1 so that 10 is replaced first. If we
* loop from 1 to 10, 1 will replace 1 and 10 incorrectly.
*/
for (int i = filters.length; i > 0; i--)
{
/* Index for 0 based array */
String filter = filters[i - 1];
if ((filter != null) && (filter.length() > 0))
{
advanced = advanced.replaceAll(Integer.toString(i), filter);
}
}
return advanced;
}
}
首先,我只是做了一個簡單的String.replaceAll。問題是,如果我輸入的字符串包含一個整數,這可能會被替換。
E.g.
我使用String陣列String[] filters = { "Name = 1", "Name = 2", "Name = 3" };
這工作得很好,並且輸出是:
Name = 1 OR Name = 2 OR Name = 1
然而,如果使用String[] filters = { "Name = 2", "Name = 1", "Name = 3" };
輸出不正確,爲1在「Name = 1」中也被替換爲:
Name = 2 OR Name = Name = 2 OR Name = 2
然後我嘗試使用java.Text.FormatMessage。但是,在這種情況下,我需要遍歷字符串以首先包裝所有整數,然後創建一個新的Object [],第一個值爲空。這是從運行上述實施例的輸出:
名稱= 2 OR名稱= 3或名稱= 2
名稱= 1 OR名稱= 3或名稱= 1
任何人是否有任何其他的想法?
這是一個家庭作業問題或類似的地方,你必須使用該語法,或者你有靈活性來修改它嗎? – chrylis
看看這個取代我所做的一切。你可能會在那裏找到你的解決方案:) http://fiddle.re/m4cke確保你使用該鏈接時單擊java按鈕。 –
感謝您的回覆。 @ chrylis,這不是功課,所以我有充分的靈活性。 :) 這些字符串將全部由用戶通過用戶界面生成。我需要編寫一個可以安全地對任何字符串進行交換的方法。最多可以有10個字符串進行替換,因此有關從10循環到1的註釋。 如果用戶沒有爲高級輸入字符串,我只是將過濾器連接在一起。如果他們提供高級字符串,我需要安全地進行替換。 我需要閱讀正則表達式,因爲它們不是我喜歡的東西。 –