Як я можу зробити цитати для друку на Java, наприклад “Привіт”?


75

Як я можу зробити друк на Java "Hello"?

Коли я набираю, System.out.print("Hello");результат буде Hello. Що я шукаю, це "Hello"з лапками ( "").



Відповіді:


138
System.out.print("\"Hello\"");

Символ подвійних лапок потрібно уникнути зворотною рискою рискою у літералі рядка Java. Інші персонажі, які потребують особливого ставлення, включають:

  • Повернення каретки та нова лінія: "\r"і"\n"
  • Зворотний слеш: "\\\\"
  • Одинарна котирування: "\'"
  • Горизонтальна стрічка вкладки та форми: "\t"і"\f"

Повний список екранувань рядків і символів літералу Java можна знайти в розділі 3.10.6 JLS.

Варто також зазначити, що ви можете включити довільний символ Unicode у свій вихідний код, використовуючи захисні послідовності Unicode у формі "\ uxxxx", де "x" - шістнадцяткові цифри. Однак вони відрізняються від звичайних рядок та символів, тим, що ви можете використовувати їх де завгодно в програмі Java ... не тільки в рядках та символах; див. розділи 3.1 , 3.2 та 3.3 JLS , щоб отримати докладні відомості про використання Unicode у вихідному коді Java.

Дивитися також:


Чи є спосіб без зворотних скісних рисок у Java, як потрійні лапки в python?
Лакінду Акаш

2
Ні, немає.
Стівен С





3

Додавання фактичних символів лапок - це лише незначна частина проблеми; як тільки ви це зробите, ви, швидше за все, зіткнетесь із справжньою проблемою: що станеться, якщо рядок уже містить лапки, канали рядків або інші недруковані символи?

Про все подбає такий спосіб:

public static String escapeForJava( String value, boolean quote )
{
    StringBuilder builder = new StringBuilder();
    if( quote )
        builder.append( "\"" );
    for( char c : value.toCharArray() )
    {
        if( c == '\'' )
            builder.append( "\\'" );
        else if ( c == '\"' )
            builder.append( "\\\"" );
        else if( c == '\r' )
            builder.append( "\\r" );
        else if( c == '\n' )
            builder.append( "\\n" );
        else if( c == '\t' )
            builder.append( "\\t" );
        else if( c < 32 || c >= 127 )
            builder.append( String.format( "\\u%04x", (int)c ) );
        else
            builder.append( c );
    }
    if( quote )
        builder.append( "\"" );
    return builder.toString();
}

Якщо вам це потрібно зробити, (як правило) кращою альтернативою цьому є використання існуючого методу бібліотеки (наприклад, Apache Commons) для здійснення екранування / зняття екрана. Або скористатися здатністю API робити це; наприклад, JDBC PreparedStatement, конструктори URLта URI.
Стівен Сі

@StephenC так, звичайно. Корисність цієї відповіді полягає лише у доповненні "(зазвичай)", яке ви згадали. Плюс код може мати певне освітнє значення.
Майк Накіс,


1

Є два простих методи:

  1. Використовуйте зворотну косу риску \ перед подвійними лапками.
  2. Використовуйте дві одинарні лапки замість подвійних лапок, як '' замість"

Наприклад:

System.out.println("\"Hello\"");                       
System.out.println("''Hello''"); 

4
Е-е ... 2-й підхід не вирішує проблему. Це змінює проблему. Дві одинарні лапки не означають того самого, що подвійні лапки ... для комп’ютера чи для обізнаної людини.
Стівен С

0

Використовуйте послідовність втечі.

\"Hello\"

Після цього надрукується "Привіт".


Дублікатна відповідь
Стівен С

0

Зверніть увагу, є кілька речей, на які слід звернути увагу під час запуску зворотних скісних рисок з певними символами.

System.out.println("Hello\\\");

Результатом буде:

Здрастуйте\


System.out.println(" Hello\"  ");

Результатом буде:

Здрастуйте"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.