PROPOSAL: Multiline strings

Jeremy Manson jeremy.manson at gmail.com
Sun Mar 1 00:58:50 PST 2009


One thought springs to mind: the indentation will be weird in cases
where white space matters:
{
  StringBuilder sb = new StringBuilder();
  sb.append("""in this
case we need
multiple lines but
we can't start them with
lots of whitespace""");
  // ...
  System.err.println(sb);
}

Alternatively, you could have a special syntax where 4 quotes strips
out leading whitespace on each line:

{
 StringBuilder sb = new StringBuilder();
 sb.append(""""select a from Area a, CountryCodes cc
              where
                  cc.isoCode='UA'
                 and
                  a.owner = cc.country
             """");
}

Or you could use the C++ style?
{
 StringBuilder sb = new StringBuilder();
 sb.append("select a from Area a, CountryCodes cc"
               "where"
                  "cc.isoCode='UA'"
                 "and"
                  "a.owner = cc.country");
}

Frankly, to me, the big win would actually not be multiline literals,
but would be escaped String literals.  I'm sick of writing all of my
regexps with twice as many \ characters as they need.

Jeremy


On Sat, Feb 28, 2009 at 7:46 PM,  <rssh at gradsoft.com.ua> wrote:
> AUTHOR(s): Ruslan Shevchenko
>
> OVERVIEW:
>  FEATURE SUMMARY:
>   add multiline strings to java language.
>  MAJOR ADVANTAGE:
>   Possibility more elegant to write code part of codes in other languages,
>  such as sql constructions or rendering of html components.
>  MAJOR DISADVANTAGE
>   I don't know
>  ALTERNATIVES:
>  use String "+=" operator.
>  using groovy instead java in utility classes.
>
> EXAMPLES
>
> SIMPLE EXAMPLE:
>
>  StringBuilder sb = new StringBuilder();
>  sb.append("""select a from Area a, CountryCodes cc
>                where
>                   cc.isoCode='UA'
>                  and
>                   a.owner = cc.country
>              """);
>  if (question.getAreaName()!=null) {
>     sb.append("""and
>                  a.name like ?
>               """);
>     sqlParams.setString(++i,question.getAreaName());
>  }
>
>  instead:
>  StringBuilder sb = new StringBuilder();
>  sb.append("select a from Area a, CountryCodes cc\n");
>  sb.append("where cc.isoCode='UA'\n");
>  sb.append("and a.owner=cc.country'\n");
>  if (question.getAreaName()!=null) {
>     sb.append("and a.name like ?");
>     sqlParams.setString(++i,question.getAreaName());
>  }
>
>
> DETAILS:
>  Multiline strings are part of program text, which begin and ends
>  by three double quotes. (as in groovy and scala) Text withing such
>  brackets processed as multiline string with all rulles as normal Java
>  string literals, except it can be multiline. After parsing multiline
>  string is concatenation of lines with inserted value of system property
> 'line.separator' between thems.
>
>
> COMPILATION:
>  Multiline strings created and used in .class files exactly as ordinary
> strings.
>
> TESTING:
>  Nothing special. add multiline strings to test-cases.
>
> LIBRARY SUPPORT:
>  None.
>  (May be exists sence add simple template processing to standard library, but
>  I think this is goal of next janguage iteration. Now exists many good
> external
>  frameworks, such as velocity: better wait and standartize support of
> winner)
>
> REFLECTIVE APIS: None
>
> OTHER CHANGES: None
>
> MIGRATION: None
>
> COMPABILITY
>  None
>
> REFERENCES
>
>  http://bugs.sun.com/view_bug.do?bug_id=4165111
>
>
>
>
>
>
>
>



More information about the coin-dev mailing list