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

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

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

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

Q&A

解決済

2回答

694閲覧

エスケープ文字の謎 \\

BitCoin

総合スコア53

Java

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

0グッド

1クリップ

投稿2017/08/04 10:02

###エスケープ文字について
エスケープ文字の¥についてなのですが
私の認識は\自体は
\a ベル文字(アラート)
\b 1文字分戻る
\f ページ送り(クリア)
\n 改行、復帰
\r 同じ行の先頭に戻る
\t 水平タブ
\v 垂直タブ
\ \を表示
? ?を表示
' シングルクォーテーション(')を表示
" ダブルクォーテーション(")を表示
\0 ヌル
\N 8進定数(Nは8進数の定数)
\xN 1

等決められた文字に\を付けることにより特殊な表記ができ¥事態は\を付けないとダメという理解です。
この考え方で例えば ""だと"がエスケープされるため"\"をして\を表示。つまり¥をエスケープすることで¥事態にエスケープする機能をなくしただの文字にするという解釈でした。
ですので\100円などとくにエスケープされる文字がない場合は\100円と表示されると思っていましたが@円と表示されるではありませんか
これはどういうことでしょうか?
よろしくおねがいします
###該当のソースコード

java

1public class Main1 { 2 public static void main(String[] args){ 3 String[] a = new String[]{"\100円","\\"}; 4 System.out.println(a[0]+a[1]); 5 } 6} 7

###試したこと

@円\

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

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

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

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

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

guest

回答2

0

あ、ベストついてますが、ちょっと勘違いしてるので。

数字をエスケープすると8進数扱いされ、10進数に直され、その10進数に対応したアスキーコードの文字が出てくるわけですね・・・・

数字をエスケープしてるわけではなく、Javaの文字リテラルのことです。
表記方法の詳しいやつは、こちら

エスケープすると8進数字になるのでなく、8進数字に\をつけると、文字リテラルとして扱われます。
なので、\9を指定すると、8進に変換されるなら011になりそうですが実際は、コンパイルエラーです。

以下は、すべて@マークを表示する例です。
最初のStringは、見慣れたものなのだと思います。

Java

1System.out.println("@"); // これはString 2 3System.out.println(new Character((char)64)); // 64は@マークです 4System.out.println('@'); 5System.out.println('\100'); // 8進数の64 // 今回のケース 6System.out.println('\u0040'); // 16進数の64 7

ちなみに、Character、charがUnicodeにもとづくっていうのは、ここに書いてます。

参考までに、unicodeのascii表(PDFで重いですが)
0040が@って書いてあります。

で、これを利用すると、こんなこともできます。(できるけど、実際にはやっちゃダメですよ)

投稿2017/08/04 10:52

編集2017/08/04 11:23
momon-ga

総合スコア4820

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

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

BitCoin

2017/08/04 15:00

勘違いしていました。10進数に直されるのではないのですね。 あと、わかりやすくアスキコードの表を張って頂きありがとうございます。 非常に勉強になります!
guest

0

ベストアンサー

\100


\N 8進定数(Nは8進数の定数)
に当てはまってascii codeの64(8進数で100)である@になりますよ。

投稿2017/08/04 10:13

rururu3

総合スコア5545

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

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

BitCoin

2017/08/04 10:33

数字をエスケープすると8進数扱いされ、10進数に直され、その10進数に対応したアスキーコードの文字が出てくるわけですね・・・・ なんだかややこしいですね。 ありがとうございます!
otn

2017/08/04 12:29

途中で10進数を経由するわけではありません。そのまま文字になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問