LoginSignup
2
1

More than 5 years have passed since last update.

改行とかのある文字列をエスケープしないで書きたい

Last updated at Posted at 2016-12-06

AAなどの文字列はエスケープすると超絶見難くなるのでそのまま書きたくなった。

エスケープされ見るも無残な姿になってしまったD言語くん
string dman = "      ____\n      L__L|\n      /    \\\n    /        \\\n  / _______    \\\n  \\ \\#/  \\/ \\  /\n   \\|#| O| O|#\\\n    |#L _L__ #|\n    |###|  |##|\n    /###/  /##|\n   /###/   /##|\n  /###/___/###/\n /###########/\n /##########/\n    /     \\\n    \\     /\n   _ \\   /__\n  |__/  |__/";

1

Delimited Stringsというものがある。2デリミタ、文字列の終了を表す記号のある文字列である。それを使って以下のように書ける。

string s = q"/123"\n\n"/";//string dman = "123\"\\n\\n\"";
writeln(s);
このように出力される
123"\n\n"

通常エスケープしなければならない"がそのまま出力され、改行を表すはずの\nがそのまま出力されている。うれしい。この場合/がデリミタとなって、それに囲まれた部分で自由に書ける。ただしデリミタである/は書けない。

string s = q"/a/a/";//エラーになる

ただしNesting Delimiterという特殊なデリミタもある。

string s1 = q"((a)())";//(a)()
string s2 = q"(a(a)";//これはだめ

たくさんのカッコで囲まれた文字列とかを書くときに必要かもしれない。

好きな言葉をデリミタに使うこともできる。その場合デリミタのすぐ後に改行を入れる必要がある。

ソースコード中に降臨できてご満悦のD言語くん
string dman = q"DmanisGod
      ____ 
      L__L|
      /    \
    /        \
  / _______    \
  \ \#/  \/ \  /
   \|#| O| O|#\
    |#L _L__ #|
    |###|  |##|
    /###/  /##|
   /###/   /##|
  /###/___/###/
 /###########/
 /##########/
    /     \
    \     /
   _ \   /__
  |__/  |__/
DmanisGod";
writeln(dman);
出力
      ____
      L__L|
      /    \
    /        \
  / _______    \
  \ \#/  \/ \  /
   \|#| O| O|#\
    |#L _L__ #|
    |###|  |##|
    /###/  /##|
   /###/   /##|
  /###/___/###/
 /###########/
 /##########/
    /     \
    \     /
   _ \   /__
  |__/  |__/

最後に改行ができてしまうため注意が必要である。


追記

``リテラルを知らなかったことに死ぬほどキレてるD言語くん
string s =
`      ____
      L__L|
      /    \
    /        \
  / _______    \
  \ \#/  \/ \  /
   \|#| O| O|#\
    |#L _L__ #|
    |###|  |##|
    /###/  /##|
   /###/   /##|
  /###/___/###/
 /###########/
 /##########/
    /     \
    \     /
   _ \   /__
  |__/  |__/`;

3

こっちのほうがいいですね……

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1