重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

表題の通りです。

replaceAllやtoUpperCaseを組み合わせて試行錯誤したのですが、どうにもうまく行きません。よい方法を御存知の方が居られましたら、どうか御教示ください。

A 回答 (3件)

ちょっとしたサンプルを作ってみました


----------------------------------------------------------------
import java.util.regex.*;

class MatchUpper {
public static void main(String args[]) {
StringBuffer a = new StringBuffer("<a href=\"http://www.yahoo.co.jp/\">Yahoo! JAPAN</a>");
Pattern pat = Pattern.compile(">.*?<",Pattern.CASE_INSENSITIVE);
Matcher m = pat.matcher(a);

if(m.find()){
String b = a.substring(m.start(),m.end());
System.out.println(b);//マッチした部分
a.replace(m.start(),m.end(),b.toUpperCase());
System.out.println(a);//マッチした部分を大文字にした
}
}
}
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。

その手があることをすっかり失念していました。substringで取り出してtoUpperで変換したものをreplaceしてやればいいんですよね。

何やら随分と簡単なことで悩んでいたような気がします。どうもありがとうございました。

お礼日時:2006/05/30 21:32

<br /> 正規表現に関してはその機能が豊富なのでoroをよく使います。<br /> <br /> Perl5Util (

v-1 API)
http://jakarta.apache.org/oro/api/org/apache/oro …

質問者さんの要望は、察するに以下のようなことをしたいのではないかと思います。どうでしょう?


(変換結果1)qawsedrftgy HUJIKO lp;
(変換結果2)qawsedrftgyhuji1kolp;



package com.mady.test.RegTest;

import org.apache.oro.text.perl.Perl5Util;

/**
* 前方参照の記号が SUNのJavadocでは
*
* @author miura
*/
public class 大文字置換 {

/**
* メインメソッド
*
* @param args
* 外部入力引数
*/
public static void main(String[] args) {

// hujiの4文字で始まって2文字のアルファベットが続く文字列を
// 大文字に置換する。
// ついでに分かりやすくするためにその前後に空白を入れる
String pattarn = "s/(huji[a-zA-Z]{2})/ \\U$1 /g";
String input = "qawsedrftgyhujikolp;";

Perl5Util perl5Util = new Perl5Util();
String result = perl5Util.substitute(pattarn, input);
System.out.println(result);

// hujiの後に数字が入っているので対象にはならない
input = "qawsedrftgyhuji1kolp;";
result = perl5Util.substitute(pattarn, input);
System.out.println(result);

}
}
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。

このパッケージの存在は知りませんでした。かなり使いでがありそうですね。さっそくドキュメントを読んでみます。

どうもありがとうございました。

お礼日時:2006/05/30 21:34

単純に考えるとtoUpperCaseを使おうと思う気がします。



まずはあなたがどのように「replaceAllやtoUpperCaseを組み合わせて試行錯誤した」のかを示し、どのようにうまくいかなかったのかを明確にした方がよいのではないでしょうか。
    • good
    • 0
この回答へのお礼

確かに、御回答のように真っ先に考えたのはtoUpperCaseなのですが、単純に使ったのでは全文が大文字になってしまいます。

そこで、replaceAllで何とかならないかと考えたのですが、この場合は変換後の文字列を一意に指定しなければなりません。

ならばと、substringで条件に合致する部分を抜き出し、手作業でロジックを組んで置換する方法を考えましたが、該当する部分文字列が不定長であるために、正規表現にマッチしたとして何文字切り出せばいいかわからないという問題に突き当たってしまいました。

最終手段としては文字列全てを一文字ずつ条件判定しながら解析する方法も考えたのですが、対象として想定しているのが数百kB以上のファイル丸ごと一つなどですので、あまりうまくないような気がします。

何とか、標準関数の組み合わせでうまい方法はないかと考え、相談させて頂きました。

お礼日時:2006/05/30 08:48

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