質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

8284閲覧

JSPで、replaceAll の行で文字列の入れ替えができない。

退会済みユーザー

退会済みユーザー

総合スコア0

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/10/26 01:35

編集2015/10/26 04:06

JSPでHTMLをcromで表示させようとしています。

ご質問は、
JSPのパラメータに、befor_description=おはよう\nございます。 と改行コードが入っているので、
HTMLで表示すると、そのまま、「おはよう\nございます。」と改行コードも表示されてしまいます。
そこで、\n を <br> に変換したいのですが、変換できていません。

下記に、importの宣言が足りないとか、1行目の宣言が間違っているとか、色々ご指摘をください。

<%@ page language='java' contentType="text/html;charset=UTF-8" session="true" %>

<html> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>商品システム</title> </head> <body> 商品システム<br> <hr /> <tr> <td><b>ご説明</b></td> <% String strBefor_description = request.getParameter("befor_description"); %> <% strBefor_description = strBefor_description.replaceAll("\n", "<br>"); %> ← ★ここで、変換ができていない。 <td><%= strBefor_description %></td> </tr> </BODY> </HTML>

PS.
<% strBefor_description = strBefor_description.replaceAll("\n", "<br>"); %>
のように \ を一つ追加しても、変換されません。


PS.
下記のように\n以外の文字は、正常に変換されます。
<% strBefor_description = strBefor_description.replaceAll("あ", "<br>"); %>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

どうやっても、同じソースのところで、再現できなくなったので、クローズさせていただきます。
原因追及したかったのですが...、残念です。

投稿2015/10/27 10:29

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

URLパラメタに設定した日本語文字列が文字化けしてしまって
改行コードの「\n」が読み取れなくなっているんではないかなと思います。

URLパラメタを扱うやり方が色々とまとめてあるサイトを見つけたので、ご参考まで。
フォームのGETパラメータがjspで文字化けする問題

投稿2015/10/26 03:05

編集2015/10/26 03:05
kaputaros

総合スコア1844

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/10/26 03:25

ご回答ありがとうございます。 下記のようにしたら、\nを書いてある行でエラーがでるようなので、\nを別の何かで表現してみます。 HTTPステータス 500 - type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: test.jsp の中の41行目でエラーが発生しました Duplicate local variable strBefor_description 38: <tr> 39: <td><b>ご説明</b></td> 40: <% String strBefor_description = request.getParameter("befor_description"); %> 41: <% String strBefor_description = "おはよう\nございます"; %> 42: <% strBefor_description = strBefor_description.replaceAll("\\n", "<br>"); %> 43: <td><%= strBefor_description %></td> 44: </tr>
退会済みユーザー

退会済みユーザー

2015/10/26 04:07

PS.例外は、パラメーターの項目名に誤字がありました。 ですが、\nの変換は、できていません。
takyafumin

2015/10/26 04:50 編集

上記については、40行目と41行目で同一のstrBefor_descriptionを定義してしまっているのが原因ではないでしょうか? すみません、PS.読んでませんでした。 このコメントは無視してください。
kaputaros

2015/10/26 05:22 編集

Stringで直接JSP上に定義している方は純粋なJavaで考えていいと思います。 Javaのみで試してみたところ、 replaceAll() の第1引数は「"\\n"」ではなく「"\n"」でいけたので、 そこが違うのではないでしょうか? ちなみに、例外の部分は、String strBefor_description を2回宣言しているからですね。
退会済みユーザー

退会済みユーザー

2015/10/26 07:53

はい、申し訳ありません。2度読んでいるところは、完全なプログラムミスです。 ちなみに、最初は、\nだったですが、変換できなかったので、\\nにしてみました。 再度、\nにしてみます。 お手数をおかけしました。ありがとうございました。
guest

0

提示いただいているソースコードで正しく改行コード(LF)を<BR>タグに変換できるようです。
GETパラメータではなく、固定文字で検証するとreplaceAll()は正しく動作していることがわかります。

<%@ page language='java' contentType="text/html;charset=UTF-8" session="true" %> <html> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>商品システム</title> </head> <body> 商品システム<br> <hr /> <tr> <td><b>ご説明</b></td> <% //String strBefor_description = request.getParameter("befor_description"); String strBefor_description = "Hello world!\nhoge."; strBefor_description = strBefor_description.replaceAll("\n", "<br>"); %> <td><%= strBefor_description %></td> </tr> </BODY> </HTML>

GETパラメータで送信されている「改行コード」が本当に改行コードであるか確認すると解決しそうです。


以下、蛇足となりますがソースコードで気になった点を挙げさせていただきます。

  • <table>タグがない
<tr>タグはありますが、それを囲う<table>タグがありません。
  • befor_discriptionがGETパラメータとして指定されなかった場合、NullPointerExceptionが発生する

本JSPが呼び出される場合、befor_discriptionが指定されない場合、NullPointerExceptionが発生してエラーが面となってしまいます。変換処理の前にstrBefor_discriptionがNullでないかどうかチェックするとよいかと思います。


追記です。

以下のようなHTMLを準備し、テキストエリアに改行コード付きの文字を入力後に送信ボタンをクリックすることでどのようなURLになるか確認できます。

<form>タグのaction属性は実際のJSPへのパスに書き換えるとJSPと連動して検証できるかと思います。

HTML

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>JSPサンプル</title> 6</head> 7<body> 8<form method="GET" action="index.jsp"> 9<textarea name="befor_description"></textarea> 10<input type="submit" value="送信" /> 11</form> 12</body> 13</html>

投稿2015/10/26 02:29

編集2015/10/26 02:51
takyafumin

総合スコア2335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/10/26 02:38

ご回答ありがとうございます。 ソースの抜粋なので、タグが抜けたりしています。申し訳ありません。 改行コードは、"\n"がJSPを呼ぶ時のURLに含まれていますが、ご指摘の通り、\nが、改行コードでない可能性を調査していみます(\tはタブですし、\rや他も試してみます)。そのままHTMLに\nと表示されるので。<br>に変換されずに。
退会済みユーザー

退会済みユーザー

2015/10/26 04:08

PS.固定文字で、\nを指定しても変換されませんが、"お"などは、変換されます。
takyafumin

2015/10/26 04:54

記載したJSPソースコードを適当なJSPとして保存して実行させて「Hello world!」と「hoge.」の間で改行されないでしょうか? javaのStringでは改行コード(LF)を"¥n"で表します。 「¥n」という文字を表したい場合、「¥」マークをエスケープさせるため"¥¥n"と表します。 "¥t"はタブ文字、"¥¥t"は「¥t」という文字となります。
退会済みユーザー

退会済みユーザー

2015/10/26 07:54

はい、やってみます。ありがとうございます。
guest

0

こんにちわ。

ご提示のプログラムの問題というよりは、
パラメータbefor_descriptionの与え方に問題があるような気がします。

befor_description=おはよう\nございます

を、

befor_description=%e3%81%8a%e3%81%af%e3%82%88%e3%81%86%0a%e3%81%94%e3%81%96%e3%81%84%e3%81%be%e3%81%99

に変更してみてはどうでしょう?
(パラメータをUTF-8でURLエンコードしました)

ご存知でしたらすみません。

投稿2015/10/26 02:26

srsnsts

総合スコア480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/10/26 02:34

ご回答ありがとうございます。なぜか?、上記にしたところ、こんどは、上記の行で、JSPのコンパイルエラーが発生しました。 実際は、下記のように、ダブルクォーテーションで囲ったり、最後にセミコロンを付けたりしました。 befor_description="%e3%81%8a%e3%81%af%e3%82%88%e3%81%86%0a%e3%81%94%e3%81%96%e3%81%84%e3%81%be%e3%81%99 ";
srsnsts

2015/10/26 02:43

ごめんなさい、表現の仕方が十分でなくて伝わりにくかったようです。 ご提示のプログラムがjspであることから、ブラウザでプログラムを実行していると思ったんです。 ご提示のプログラムは修正しなくて大丈夫だと思いますよ。 ブラウザのURL欄に、以下のようにパラメータを与えてプログラムを実行してみてください。なお、http://hogehoge.com/testprogram.jsp の部分はMioAsakuraさんの環境に合わせ、修正してくださいね。 http://hogehoge.com/testprogram.jsp?befor_description=%e3%81%8a%e3%81%af%e3%82%88%e3%81%86%0a%e3%81%94%e3%81%96%e3%81%84%e3%81%be%e3%81%99
退会済みユーザー

退会済みユーザー

2015/10/26 03:19

ご回答ありがとうございます。 実行したところ、 「おはよう ございます」 と改行されました。改行コードが\nでは、だめとういとでしょうか? ちなみにブラウザに貼り付けた時点で、エンコードされて、「おはよう%0aございます」と表示されました。\nではなく、%0aを使うということでしょうか?
退会済みユーザー

退会済みユーザー

2015/10/26 03:21

ちなみに、「strBefor_description = strBefor_description.replaceAll("\n", "<br>");」行は、あってもエラーになりません。 あっても、なくても、おなじように、 「おはよう ございます」 と表示されます。
退会済みユーザー

退会済みユーザー

2015/10/26 03:27

cromに貼り付けた時に、\nが入っていてはいけないようですね。これが入っていると例外になる?(そんなことで例外になるとはおもえませんが、事実、例外になっています)。 ご教授ありがとうございました。
srsnsts

2015/10/26 03:31

こんにちわ。 >行コードが\nでは、だめとういとでしょうか? >\nではなく、%0aを使うということでしょうか? そうですね、URLにパラメータをセットする際にはURLの規則に 則った形で記述する必要がありますので、そういうことになります。 >あっても、なくても、おなじように、 ここの部分はどうしてその様な挙動になるのか、ちょっとわからないです。 ごめんなさい。
退会済みユーザー

退会済みユーザー

2015/10/26 04:09

いえいえ、こちらこそ、多々のお手数をおかけして申し訳ありませんでした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問