文字列「speed、7、red、fast」があります。7 を String "Seven" に置き換えたいと思います。それ、どうやったら出来るの ?
詳細 -
7 は、「Seven」だけでなく、任意の文字列に置き換えることができます。「SevenIsHeaven」でも構いません。すべての 7 を置き換えたくありません。指定されたインデックスの 7 のみです。つまり、7 のインデックスを使用して 7 を何らかの文字列で置き換えます。
String
は不変であるためStringBuilder
、パフォーマンスを向上させるために使用する必要があります。
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
yourStringBuiler.replace(
yourStringBuiler.indexOf(oldString),
yourStringBuiler.indexOf(oldString) + oldString.length(),
newString);`
String
のように全体を置き換えたい場合は、String.replaceAll()
次のような独自の関数を作成できます。
public static void replaceAll(StringBuilder builder, String from, String to)
{
int index = builder.indexOf(from);
while (index != -1)
{
builder.replace(index, index + from.length(), to);
index += to.length(); // Move to the end of the replacement
index = builder.indexOf(from, index);
}
}
ソース: StringBuilder を使用してすべての文字列を置き換えますか?
ただし、頻繁に必要とせず、パフォーマンスがそれほど重要でない場合は、単純なものでString.replaceAll()
もうまくいきます。
以下のように単純にどうですか?
String str = "speed,7,red,fast";
str = str.replace("7", "Seven");
7 は、「Seven」だけでなく、任意の文字列に置き換えることができます。「SevenIsHeaven」でも構いません。すべての 7 を置換したくありません。指定されたインデックスの 7 のみです。
または、正規表現を使用して最初の数値を意味のある文字列に置き換えたい場合。
String str = "speed,7,red,fast";
str = str.replaceFirst("\\d", "Seven");
より良い方法は、文字列自体を配列に格納し、スペースに吐き出すことです。
String s[];
static int index;
s = in.readLine().spilt(" ");
指定されたインデックスで指定された単語の配列をスキャンし、それを目的の文字列に置き換えます。
for(int i =0;i<s.length; i++)
{
if((s[i] == "7")&&(i==index))
{
s[i]= "Seven";
}
}