アプリ版:「スタンプのみでお礼する」機能のリリースについて

文字列から特定の文字を抜き出す処理をしたいです。
ちょっと調べてみたところ、replaceAllというものがあるそうで、こりゃいい!、とばかりにコーディングしてコンパイルしてみたのですが・・・。
JDKが1.3では使えなかったです・・・。
1.3で実現するにはどのようなコードを書いたらよいでしょうか?
確か、勉強し始めのころ、文字長をlength()でとって、一文字ずつ調べていって置換・・・
というようにしていたような気がしますが、
どのようなメソッドを使っていたかすっかり忘れてしまいました(ボケ
webで調べても1.3はすでに過去の産物なのか、replaceAllの例ばかりが引っかかります。
簡単なサンプルがあるととても助かります。
よろしくお願いいたします。

A 回答 (6件)

//以下は「文字列置換」ではありませんが…。



import java.util.*;

public class Demo {
public static void main(String[] a){
String text="(((ABC)()()(ABC)()())(ABC)))D";
String delimit="()";
StringBuffer buffer=new StringBuffer();
StringTokenizer tknzr=new StringTokenizer(text,delimit);
if(tknzr.hasMoreTokens()){
buffer.append(tknzr.nextToken());
}
while(tknzr.hasMoreTokens()){
buffer.append(" ");//←全角スペース
buffer.append(tknzr.nextToken());
}

System.out.println("["+buffer.toString()+"]");
}
}
    • good
    • 0
この回答へのお礼

StringTokenizerですね!
じつは私も昨日「文字列変換 java」で検索していたところ
こちらが引っかかりまして、
使ってみました。これ便利ですよね!
回答ありがとうございました!

お礼日時:2006/02/01 20:42

replaceAll もどきを作ってみました。


----------------------------------------------------------------
public class Sample {
public static String replaceAll(String source, String target, String replacement){
StringBuffer wk = new StringBuffer(source);
int repLen = target.length();
int i=source.length();
while(i>=0){
i=source.lastIndexOf(target, i);
if(i>=0){
wk.replace(i, i+repLen, replacement);
i--;
}
}
return wk.toString();
}
public static void main(String[] args) {
String str ="(ABC)(ABC)(ABC)";
String result = replaceAll(str, ")("," ");
result = replaceAll(result, "(","");
result = replaceAll(result, ")","");
System.out.println(result);
}
}
    • good
    • 0
この回答へのお礼

わざわざすみません!
早速コンパイルしてみました!
いろいろ応用が利きそうなので、使わせていただきたいと思います。

ありがとうございます。

お礼日時:2006/02/01 20:40

>char型で「何も無い」を表現するにはどうするのでしょうか・・・?


char型で「何も無い」は、表現できないと思います。

この回答への補足

では、文字列から任意の文字を削除はどうやるのでしょうか。
delphiにdelete()というのがあったのでJavaにもあるかなあ、と思ったのですが、
あったものの「ファイルをデリート」でした・・・

補足日時:2006/01/31 10:57
    • good
    • 0

> )(を取り除いた後そこに全角のスペースをひとつ入れたいです。



これって,全角スペースへの「置換」ですよね?

s.replase('(', ' '); // 2つ目のシングルクォートの中身は全角スペース
では駄目なのでしょうか?
駄目ならその理由を補足してください。

この回答への補足

回答ありがとうございます。
えっとですね・・・
(ABC)(ABC)(ABC)
のようになっています。
すると(と)を消して全角空白に置換していくと、
文字と文字の間が全角空白2文字、になってしまうんです。
ですので、)に関しては空白、(にかんしては''とやれば良いかな・・・
と思ったのですが''はだめなんですよね・・・

補足日時:2006/01/31 10:54
    • good
    • 0

もう悩んでないでそういうメソッド自作してしまえばいいのでは?



public String myReplace(String s, char c) {
 StringBuffer buf = new StringBuffer();
 for (int i = 0, len = s.length(); i < len; i++) {
  char sc = s.charAt(i);
  if (sc != c)
   buf.append(sc);
 }
 return buf.toString();
}
    • good
    • 0
この回答へのお礼

ああ、そうでしたね!
1.3だとStringBufferに変換しないと出来ない処理がありましたね・・・
1.4は結構ごまかしが利くようになっていますね・・・

しかし、実を申しますと、replace()というメソッドならあって、
引数は(char,char)なんですけど、for文を使わなくても文字列すべてに対して変換してくれるみたいです。
でも、入れ替えるときにはこれでいいのですが、”抜き取る”時にはどうしたら良いでしょうか?
'('を''という風にやったらエラーになってしまいました。
そういえばcharの''ってだめでしたね・・・

お礼日時:2006/01/30 17:27

取り除きをするのでしょうか?


それとも抜き出しをするのでしょうか?
それとも置換をするのでしょうか?
正規表現を使うのですか?

この回答への補足

取り除きです。
もう少し言うと()が入ってしまっているので取り除いて、空白を入れたいです。
で・・・また少しわかったのですが、replaceAll()は無くてもreplace()があることがわかりました。
これでナントカできました!!・・・・

と思ったのですが、)(を取り除いた後そこに全角のスペースをひとつ入れたいです。
それでreplace('(','');
とやってみたのですが…!!
char型で''というのはだめだってことを思い出しました。
char型で「何も無い」を表現するにはどうするのでしょうか・・・?
nullでもだめでしたしもちろん””でもだめです・・・

補足日時:2006/01/30 15:09
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!