精华内容
下载资源
问答
  • python多行字符串

    千次阅读 2021-02-10 05:09:36
    Python中如何处理长代码格式化问题,如何提高格式化输出的长字符串的可读性?当我们需要格式化输出一个很长的字符串的时候,都写在一行显得很难看,而且可读性也很差;当我们使用链式的语法写代码的时候常常会超出...

    Python中如何处理长代码格式化问题,如何提高格式化输出的长字符串的可读性?

    当我们需要格式化输出一个很长的字符串的时候,都写在一行显得很难看,而且可读性也很差;当我们使用链式的语法写代码的时候常常会超出屏幕的显示区域。很多语言都有这方面的支持,但是python出现之后,无人能出其右,与其媲美。

    下面我们看看Python是如何做到的:

    就以格式化一个SQL语句为例,展示一下Python之美

    import sqlite3

    db = sqlite3.connect('tes.db')

    db.execute("drop table table2")

    # 一个字符串分成多个

    db.execute(

    "create table table2("

    "name text,"

    "age int"

    ")")

    db.execute(

    "insert into table2(name,age)"

    "values('Mark',29),"

    "('Carrie',26)"

    )

    qr = db.execute("select * from table2")

    # 长代码直接合适的分隔符位置换行就可以了

    for r in qr:

    print("name: {0} is {1} years old"

    .format(r[0], r[1]))

    # name: Mark is 29 years old

    # name: Carrie is 26 years old

    相信这个简单的例子已经展示了Python的美妙之处,同时也学到了如何让你的代码更整洁,也就能写出更pythonic的代码了。同时利用这些特性我们还能做出哪些更有有意思的玩法呢?

    之前在知乎上看了如何写出勃式风格的问题和答案,感觉很有意思,看看这个篇文章像吗?

    python 多行字符串

    字符串是要用引号(双引号,单引号,多行用三个引号)引起来 TypeError: not enough arguments for format string you have to specify m ...

    Python中raw字符串与多行字符串

    如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦.为了避免这种情况,我们可以在字符串前面加个前缀r ,表示这是一个 raw 字符串,里面的字符就不需要转义了.例如: r'\(~_~ ...

    Python 入门(一)定义字符串+raw字符串与多行字符串

    定义字符串 前面我们讲解了什么是字符串.字符串可以用''或者""括起来表示. 如果字符串本身包含'怎么办?比如我们要表示字符串 I'm OK ,这时,可以用" &quot ...

    Python:Base1(数据类型,print语句,变量,定义字符串,raw字符串与多行字符串,Unicode字符串,整数和浮点数运算,布尔类型运算)

    1.Python中数据类型: 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据 ...

    python学习之多行字符串

    多行字符串的写法 ("..." "..." "...") 例子 >>> err = ("a" ... ...

    Python中Unicode字符串

    Python中Unicode字符串 字符串还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte ...

    Python基础(二) —— 字符串、列表、字典等常用操作

    一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 二.三元运算 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为 ...

    Python中的字符串处理

    Python转义字符 在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符.如下表: 转义字符 描述 \(在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a ...

    Python学习笔记整理(四)Python中的字符串..

    字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3=""&quo ...

    随机推荐

    SecureCRT在远程主机和本地之间传输文件

    概述 Linux系统不像Window系统有清晰的操作页面,数据能Copy下来,远程Linux的数据,就牵扯到本地数据与远程服务器数据交换的问题.Linux远程攻击SecureCrt提供了2种方式,可以 ...

    spark-sql性能测试

    一,测试环境       1) 硬件环境完全相同:              包括:cpu/内存/网络/磁盘Io/机器数量等       2)软件环境:              相同数据       ...

    初学git(一):创建本地“仓库”

    初学git(一):创建本地“仓库” 作为一个初学者,我是跟着廖学峰老师的官方博客学习,这里只是做个笔记,哈哈,关于git的历史.和其他版本控制的对比啥的,我就不说了.另外,我这里用的是Mac OS X ...

    debugging tools

    https://blogs.msdn.microsoft.com/debugdiag/ https://blogs.msdn.microsoft.com/debuggingtoolbox/2012/1 ...

    POJ 1411

    #include #include #include #define MAXN 50000 using nam ...

    Course1-Python数据类型总结

    一. 开始正式学习前的tips: Python和其他语言有很多类似, 也有一些差异, 下面先总结了一些基本语法上的注意事项 1. 注意缩进 2. 一行语句分为多行显示: \ 3. 注释: 单行注释#, ...

    python3中使用builtwith的方法(很详细)

    1. 首先通过pip install builtwith安装builtwith C:\Users\Administrator>pip install builtwith Collecting b ...

    Django之Model

    一.字段 常用字段: AutoField:int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntergerField:一个 ...

    [Spark][kafka]kafka 生产者,消费者 互动例子

    [Spark][kafka]kafka 生产者,消费者 互动例子 # pwd/usr/local/kafka_2.11-0.10.0.1/bin 创建topic:# ./kafka-topics.sh ...

    Flask--templates-多个模板文件,视图函数如何判断查询路径

    结论:以当前视图的模板为基准,查找模板文件,如果没有找到就会报错,如果需要更换模板的访问路径,可以修改__name__参数. 参考资料: https://blog.csdn.net/f70408410 ...

    展开全文
  • Python 多行字符串

    2021-02-03 21:19:51
    1、多行(Multiline)字符串多行字符串允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。可以使用三个引号将多行字符串分配给变量:例如:可以使用三个双引号:a = """Lorem ipsum dolor sit ...

    1、多行(Multiline)字符串

    多行字符串允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。可以使用三个引号将多行字符串分配给变量:

    例如:

    可以使用三个双引号:a = """Lorem ipsum dolor sit amet,

    consectetur adipiscing elit,

    sed do eiusmod tempor incididunt

    ut labore et dolore magna aliqua."""

    print(a)

    或三个单引号:

    例如:a = '''Lorem ipsum dolor sit amet,

    consectetur adipiscing elit,

    sed do eiusmod tempor incididunt

    ut labore et dolore magna aliqua.'''

    print(a)

    注意:结果中, 换行符被插入到与代码相同的位置。

    相关文档:

    展开全文
  • JSON中的多行字符串

    2021-04-16 13:30:36
    实际上,您可能希望将行结尾与字符串中的行结尾同步,例如 x={text:"experts\n\ exchange"} 多行字符串长度 console.log("Hello\nWorld".length) 11 console.log("Hello World".length) 11 请注意,带换行符的字符...

    回答(19)

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    只需包含段落标记,使其看起来整洁,高效 .

    示例:“body”:“

    这里的第1段 .

    这里的第2段 .

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    这是一个非常古老的问题,但我在搜索时遇到了这个问题,我想我知道问题的根源 .

    JSON不允许在其数据中使用“真实”换行符;它只能逃脱换行 . 请参阅上面@YOU的答案 . 根据这个问题,看起来你试图以两种方式逃避Python中的换行:使用行继续符(“\”)或使用“\ n”作为转义 .

    但请记住:如果你在python中使用一个字符串,特殊的转义字符(“\ t”,“\ n”)将转换为REAL控制字符! “\ n”将替换为表示换行符的ASCII控制字符,该字符恰好是JSON中非法的字符 . (至于续行字符,它只需要换行 . )

    所以你需要做的是防止Python转义字符 . 您可以通过使用原始字符串(将 r 放在字符串前面,如 r"abc\ndef" ,或者在换行符前面添加一个额外的斜杠( "abc\\ndef" )来完成此操作 .

    上述两种方法都不会将“\ n”替换为真正的换行符ASCII控制字符,而是将“\ n”作为两个文字字符,然后JSON可以将其解释为换行符 .

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    我们总是可以为多行字符串使用字符串数组,如下所示 .

    {

    "singleLine": "Some singleline String",

    "multiline": ["Line one", "line Two", "Line Three"]

    }

    我们可以轻松地迭代数组以多行方式显示内容 .

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    {{名称}}

    {}

    my.opt.push({ '名称': '行1', 'NAME1': 'LINE2')

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    将多行文本放在txt文件上然后

    var str = {

    text: cat('path_to_file/text.txt')

    }

    (它在mongoDB上运行)

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    你可以简单地运行下面的代码,你需要在tilde ~ 字符之间的多行字符串:

    var multiLineString = `

    this

    is

    the

    multiline

    String

    `;

    JSON.stringify(multiLineString);

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    JSON不允许断行以提高可读性 .

    最好的办法是使用一个可以为你换行的IDE .

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    使用多重多行在记事本中写入任何文本,然后按ctl a和ctl j将它们排列在一行中

    在json文件中写:

    {

    "key":"multi line copied from notepad++"

    }

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    不幸的是,这里的许多答案都解决了如何在字符串数据中添加换行符的问题 . 问题是如何通过在多行代码中分割字符串值来使代码看起来更好 . (甚至认识到这一点的答案也提供了“解决方案”,假设一个人可以自由地改变数据表示,在许多情况下,人们不会这样做 . )

    更糟糕的是,没有好的答案 .

    在许多编程语言中,即使它们没有明确支持跨行分割字符串,您仍然可以使用字符串连接来获得所需的效果;只要编译器不是很糟糕,这很好 .

    但是json不是一种编程语言;它只是一个数据表示 . 你不能告诉它连接字符串 . 它的(相当小的)语法也不包括用于在多行上表示字符串的任何工具 .

    没有设计某种类型的预处理器(而且,对于一个人来说,不想有效地编写我自己的语言来解决这个问题),这个问题没有一般解决方案 . 如果您可以更改数据格式,则可以替换字符串数组 . 否则,这是json不是为人类可读性而设计的众多方法之一 .

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    看看the specification! JSON语法的char生成可以采用以下值:

    any-Unicode-character-except- " -or- \ -or-control-character

    \"

    \\

    \/

    \b

    \f

    \n

    \r

    \t

    \u 四个十六进制数字

    换行符是"control characters"所以,不,你的字符串中可能没有文字换行符 . 但是,您可以使用 \n 和 \r 的任何组合对其进行编码 .

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    使用正则表达式将所有出现的 \r\n 替换为 \\n .

    这在scala中对我有用 .

    val newstr = str.replace("\r\n", "\\n")

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    您可以尝试在句子之间放置

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    Is it possible to have multi-line strings in JSON?

    是 . 我刚刚使用我的Firefox网络浏览器测试了这个,按F12,点击控制台并在屏幕底部输入 .

    x={text:"hello\nworld"}

    对象x刚刚从包含多行字符串的JSON格式字符串创建 .

    console.log(x.text)

    hello

    world

    显示x.text,显示它是一个多行字符串 .

    这两个测试表明Firefox的Javascript解释器很乐意使用多行字符串创建和使用JSON .

    使用 JSON.stringify 和 JSON.parse 进行的更多测试表明Javascript解释器可以转换为包含多行字符串到JSON的对象,并再次解析它,完全没有问题 .

    我过去将莎士比亚的全部作品存储为JSON对象中的属性,然后通过互联网发送,没有损坏 .

    示例

    这是通过三行输入的两行字符串

    x={text:"expert\

    s\nex\

    change"}

    我们可以显示对象

    console.log(x)

    Object { text: "experts\nexchange" }

    或者字符串

    console.log(x.text)

    experts

    exchange

    字符串中的行结束来自使用\ n,并且在行的末尾仅使用\来实现多个输入行 .

    实际上,您可能希望将行结尾与字符串中的行结尾同步,例如

    x={text:"experts\n\

    exchange"}

    多行字符串长度

    console.log("Hello\nWorld".length)

    11

    console.log("Hello World".length)

    11

    请注意,带换行符的字符串不长于带空格的字符串 . 即使键盘上键入了两个字符(''和'n'),字符串中也只存储一个字符 .

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    使用json5(loader)参见https://json5.org/ - example(by json5)

    {lineBreaks:“看,妈妈!\不,不!”,}

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    尝试使用 base64 编码的字符串值 . 大部分时间都为我工作 .

    {

    "singleLine": "Some singleline String",

    "multiline": ["Line one", "line Two", "Line Three"]

    }

    在 base64 之后编码的字符串看起来像

    {

    "singleLine": "Some singleline String",

    "multiline": "TGluZSBvbmUKTGluZSBUd28KTGluZSBUaHJlZQ=="

    }

    base64编码和解码适用于所有语言 .

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    fieldval = rs.getString(rs.getMetaData().getColumnName(i))

    .trim()

    .replace("\\", "/")

    .replace("\r\n", "\\n")

    .replace("''", "\\n")

    .replace("\"", "\\n");

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    将每一行换成引号并以逗号结束,如下所示:

    "content": [

    "This is the first line",

    "this is second",

    "and so on"

    ]

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    JSON不允许真正的换行符 . 您需要使用 \n 替换所有换行符 .

    e15298c6a3b4591803e154ab0c3b3e2e.png

    2 years ago

    我必须为一个小的Node.js项目做这个,并发现这个解决方法:

    {

    "modify_head": [

    "

    "",

    ""

    ],

    "modify_body": [

    "",

    ""

    ],

    }

    这对我来说看起来很整洁,因为我必须到处使用双引号 . 虽然不然,但我可能会使用YAML,但这有其他陷阱并且本身不受支持 . 解析后,我只使用 myData.modify_head.join('\n') 或 myData.modify_head.join() ,具体取决于我是否想要在每个字符串之后换行 .

    展开全文
  • 寻求了很久关于如何在 Java 中实现多行字符串,即 Here Document。因为在测试中准备大的字符串数据是不得不用加号去拼接,甚至是麻烦。稍好就是用 http://www.htmlescape.net/javaescape_tool.html 把你输入的大段...

    寻求了很久关于如何在 Java 中实现多行字符串,即 Here Document。因为在测试中准备大的字符串数据是不得不用加号去拼接,甚至是麻烦。稍好就是用 http://www.htmlescape.net/javaescape_tool.html 把你输入的大段文字生成 Java 的字符串。

    找过一些介绍 Java 实现 Here Document 的方法,首先大家无一不是把这个多行字符串塞在注释里,有些实现在运行还在依赖于 Java 源文件中的注释,这不太可取。聪明的做法应该要去打编译器的主意,让编译后体现在 Class 文件中,变量就被赋上了多行字符串值,这就是 JDK1.5 引入的 APT(Annotation Processing Tool),到 JDK1.6 后可操作性更强了,可以 javac 的时候带上 -processor 参数。

    单单从语法特性上来讲,我觉得 Java 与现今流行的语言还是有差距,不过它一直在成长,像 JDK 1.5 和 1.7 这两个版本就带来了不少好东西。想要见识一下其他些个语言,如 Perl, PHP, Ruby, C++11 怎么实现 Here Document 还是请看 http://en.wikipedia.org/wiki/Here_document。

    就连 Java 最亲密的战友 C# 都早实现了 Here Document,用 @ 符号:

    string miniTemplate = @"

    Hello ""{0}"",

    Your friend {1} sent you this message:

    {2}

    That's all!";

    1

    2

    3

    4

    5

    stringminiTemplate=@"

    Hello ""{0}"",

    Your friend {1} sent you this message:

    {2}

    That's all!";

    现在正式来看 Java 应用 APT 如何实现 Here Document 的,会建立两个项目,分别是 HereDocument 和  HereDocumentTest,前者是实现,后者是对它的测试,必须分成两个项目,因为编译后者的时候,前者的 Class 文件必须先存在。

    为方便起见,都做成 Maven 项目,下面来展示它们。

    1. HereDocument 项目:

    1) pom.xml:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>cc.unmi.apt</groupId>

    <artifactId>HereDocument</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <profiles>

    <profile>

    <id>default-tools.jar</id>

    <activation>

    <property>

    <name>java.vendor</name>

    <value>Sun Microsystems Inc.</value>

    </property>

    </activation>

    <dependencies>

    <dependency>

    <groupId>com.sun</groupId>

    <artifactId>tools</artifactId>

    <version>1.6.0</version>

    <scope>system</scope>

    <systemPath>${java.home}/../lib/tools.jar</systemPath>

    </dependency>

    </dependencies>

    </profile>

    </profiles>

    </project>

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>cc.unmi.apt</groupId>

    <artifactId>HereDocument</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <profiles>

    <profile>

    <id>default-tools.jar</id>

    <activation>

    <property>

    <name>java.vendor</name>

    <value>SunMicrosystemsInc.</value>

    </property>

    </activation>

    <dependencies>

    <dependency>

    <groupId>com.sun</groupId>

    <artifactId>tools</artifactId>

    <version>1.6.0</version>

    <scope>system</scope>

    <systemPath>${java.home}/../lib/tools.jar</systemPath>

    </dependency>

    </dependencies>

    </profile>

    </profiles>

    </project>

    代码中要用到 tools.jar 中的实现类,所以必须引入,Mac OS 下的相应的类可能在 ${java.home}/../Classes/classes.jar 中。

    2) HereDocument 注解

    package cc.unmi.apt;

    import java.lang.annotation.ElementType;

    import java.lang.annotation.Retention;

    import java.lang.annotation.RetentionPolicy;

    import java.lang.annotation.Target;

    @Target(ElementType.FIELD)

    @Retention(RetentionPolicy.SOURCE)

    public @interface HereDocument {

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    packagecc.unmi.apt;

    importjava.lang.annotation.ElementType;

    importjava.lang.annotation.Retention;

    importjava.lang.annotation.RetentionPolicy;

    importjava.lang.annotation.Target;

    @Target(ElementType.FIELD)

    @Retention(RetentionPolicy.SOURCE)

    public@interfaceHereDocument{

    }

    3) HereDocumentProcessor

    package cc.unmi.apt;

    import java.util.Set;

    import javax.annotation.processing.AbstractProcessor;

    import javax.annotation.processing.ProcessingEnvironment;

    import javax.annotation.processing.RoundEnvironment;

    import javax.annotation.processing.SupportedAnnotationTypes;

    import javax.annotation.processing.SupportedSourceVersion;

    import javax.lang.model.SourceVersion;

    import javax.lang.model.element.Element;

    import javax.lang.model.element.TypeElement;

    import com.sun.tools.javac.model.JavacElements;

    import com.sun.tools.javac.processing.JavacProcessingEnvironment;

    import com.sun.tools.javac.tree.JCTree;

    import com.sun.tools.javac.tree.TreeMaker;

    @SupportedAnnotationTypes({"cc.unmi.apt.HereDocument"})

    @SupportedSourceVersion(SourceVersion.RELEASE_6)

    public final class HereDocumentProcessor extends AbstractProcessor {

    private JavacElements elementUtils;

    private TreeMaker maker;

    @Override

    public void init(final ProcessingEnvironment procEnv) {

    super.init(procEnv);

    JavacProcessingEnvironment javacProcessingEnv = (JavacProcessingEnvironment) procEnv;

    this.elementUtils = javacProcessingEnv.getElementUtils();

    this.maker = TreeMaker.instance(javacProcessingEnv.getContext());

    }

    @Override

    public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {

    Set<? extends Element> fields = roundEnv.getElementsAnnotatedWith(HereDocument.class);

    for (Element field : fields) {

    String docComment = elementUtils.getDocComment(field);

    if (null != docComment) {

    JCTree.JCVariableDecl fieldNode = (JCTree.JCVariableDecl) elementUtils.getTree(field);

    fieldNode.init = maker.Literal(docComment);

    }

    }

    return true;

    }

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    packagecc.unmi.apt;

    importjava.util.Set;

    importjavax.annotation.processing.AbstractProcessor;

    importjavax.annotation.processing.ProcessingEnvironment;

    importjavax.annotation.processing.RoundEnvironment;

    importjavax.annotation.processing.SupportedAnnotationTypes;

    importjavax.annotation.processing.SupportedSourceVersion;

    importjavax.lang.model.SourceVersion;

    importjavax.lang.model.element.Element;

    importjavax.lang.model.element.TypeElement;

    importcom.sun.tools.javac.model.JavacElements;

    importcom.sun.tools.javac.processing.JavacProcessingEnvironment;

    importcom.sun.tools.javac.tree.JCTree;

    importcom.sun.tools.javac.tree.TreeMaker;

    @SupportedAnnotationTypes({"cc.unmi.apt.HereDocument"})

    @SupportedSourceVersion(SourceVersion.RELEASE_6)

    publicfinalclassHereDocumentProcessorextendsAbstractProcessor{

    privateJavacElementselementUtils;

    privateTreeMakermaker;

    @Override

    publicvoidinit(finalProcessingEnvironmentprocEnv){

    super.init(procEnv);

    JavacProcessingEnvironmentjavacProcessingEnv=(JavacProcessingEnvironment)procEnv;

    this.elementUtils=javacProcessingEnv.getElementUtils();

    this.maker=TreeMaker.instance(javacProcessingEnv.getContext());

    }

    @Override

    publicbooleanprocess(finalSet<?extendsTypeElement>annotations,finalRoundEnvironmentroundEnv){

    Set<?extendsElement>fields=roundEnv.getElementsAnnotatedWith(HereDocument.class);

    for(Elementfield:fields){

    StringdocComment=elementUtils.getDocComment(field);

    if(null!=docComment){

    JCTree.JCVariableDeclfieldNode=(JCTree.JCVariableDecl)elementUtils.getTree(field);

    fieldNode.init=maker.Literal(docComment);

    }

    }

    returntrue;

    }

    }

    上面代码完成后运行 mvn clean install 把生成的 jar 包安装到本地库中,下面的 HereDocumentTest 要依赖于它。

    2. HereDocumentTest 项目

    1) pom.xml:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>cc.unmi.apt</groupId>

    <artifactId>HereDocumentTest</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <dependencies>

    <dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>4.7</version>

    </dependency>

    <dependency>

    <groupId>cc.unmi.apt</groupId>

    <artifactId>HereDocument</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    </dependency>

    </dependencies>

    <build>

    <plugins>

    <plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-compiler-plugin</artifactId>

    <version>2.3.2</version>

    <configuration>

    <source>1.6</source>

    <target>1.6</target>

    <annotationProcessors>

    <annotationProcessor>cc.unmi.apt.HereDocumentProcessor</annotationProcessor>

    </annotationProcessors>

    </configuration>

    </plugin>

    <plugin>

    <groupId>org.codehaus.mojo</groupId>

    <artifactId>exec-maven-plugin</artifactId>

    <version>1.2.1</version>

    <configuration>

    <mainClass>cc.unmi.apt.Client</mainClass>

    </configuration>

    </plugin>

    </plugins>

    </build>

    </project>

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>cc.unmi.apt</groupId>

    <artifactId>HereDocumentTest</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <dependencies>

    <dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>4.7</version>

    </dependency>

    <dependency>

    <groupId>cc.unmi.apt</groupId>

    <artifactId>HereDocument</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    </dependency>

    </dependencies>

    <build>

    <plugins>

    <plugin>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-compiler-plugin</artifactId>

    <version>2.3.2</version>

    <configuration>

    <source>1.6</source>

    <target>1.6</target>

    <annotationProcessors>

    <annotationProcessor>cc.unmi.apt.HereDocumentProcessor</annotationProcessor>

    </annotationProcessors>

    </configuration>

    </plugin>

    <plugin>

    <groupId>org.codehaus.mojo</groupId>

    <artifactId>exec-maven-plugin</artifactId>

    <version>1.2.1</version>

    <configuration>

    <mainClass>cc.unmi.apt.Client</mainClass>

    </configuration>

    </plugin>

    </plugins>

    </build>

    </project>

    本项目引入了 HereDocument 生成的 jar 包,在插件中配置了 annotationProcessor 就是前面的 cc.unmi.apt.HereDocumentProcessor。

    2) Client.java

    package cc.unmi.apt;

    public class Client {

    /**

    <html>

    <head/>

    <body>

    <p>

    Hello

    HereDocument

    World

    </p>

    </body>

    </html>

    */

    @HereDocument

    private static String html;

    public static void main(final String[] args) {

    System.out.println(html);

    }

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    packagecc.unmi.apt;

    publicclassClient{

    /**

    <html>

    <head/>

    <body>

    <p>

    Hello

    HereDocument

    World

    </p>

    </body>

    </html>

    */

    @HereDocument

    privatestaticStringhtml;

    publicstaticvoidmain(finalString[]args){

    System.out.println(html);

    }

    }

    3) HereDocumentTest.java

    package cc.unmi.apt;

    import org.junit.Test;

    public class HereDocumentTest {

    /**

    <html>

    <head/>

    <body>

    <p>

    Hello

    HereDocument

    World

    </p>

    </body>

    </html>

    */

    @HereDocument

    private static String html;

    @Test

    public void testHereDocument(){

    System.out.println(html);

    }

    }

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    packagecc.unmi.apt;

    importorg.junit.Test;

    publicclassHereDocumentTest{

    /**

    <html>

    <head/>

    <body>

    <p>

    Hello

    HereDocument

    World

    </p>

    </body>

    </html>

    */

    @HereDocument

    privatestaticStringhtml;

    @Test

    publicvoidtestHereDocument(){

    System.out.println(html);

    }

    }

    现在来看用 Maven 运行 HereDocumentTest 项目的效果,先命令行进到 HereDocumentTest 所在目录,为确保 Class 文件是由 Maven 编译出来的,先运行:

    mvn clean compile

    然后执行

    mvn exec:java, 输出:

    heredoc_1.png?resize=600%2C392用 mvn exec:java 运行的是 cc.unmi.apt.Client 代码,因为用到了 Maven 的 exec-maven-plugin 插件。

    也可以运行

    mvn test

    执行的是 cc.unmi.apt.HereDocumentTest 中的测试用例,也看效果:

    heredoc_2.png?resize=676%2C433

    那到底应用了 HereDocumentProcessor 发生了什么,查看一下生成的 Client.class 文件:

    heredoc_3.png?resize=765%2C255

    只截了个屏,不完整,但发生的事情很简单,就是 HereDocumentProcessor 把代码中对 html 变量用它上头的注解内容给赋了值。

    因为使用 APT 使你瞄上了 Java 编译器,所以有些时候用起来会麻烦些,特别是在使用 IDE 的时候。

    像命令行编译时

    javac -processor , [] -processorpath

    比如说以上的 HereDocument.class 和  HereDocumentProcessor.class 打包在 c:\heredoc.jar 包中,编译 Client.java 就用命令:

    javac -processor cc.unmi.apt.HereDocumentProcessor -processorpath c:\heredoc.jar -classpath .;c:\heredoc.jar Client.java

    然后执行

    java Client

    在 Eclipse 中配置 Project Properties 里的 Java compiler /  Annotation Processing

    注:如果按照上面的方法在 Eclipse IDE 中配置来使用 Processor,那么 init() 方法中的 procEnv 的类型是 org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeBuildProcessingEnvImpl,而不是  JavacProcessingEnvironment,并且它们之间不存在父子关系,无法进行转型,会有异常。

    在 NetBeans 配置 Project Properties / Build / Compiling / Annotation Processors

    展开全文
  • Java多行字符串

    千次阅读 2021-02-12 15:11:34
    小编典典最好的选择是将字符串+组合在一起。人们提到的其他一些选项(StringBuilder,String.format,String.join)仅在以字符串数组开头时才是首选。考虑一下:String s = "It was the best of times, it was the ...
  • 【摘要】Python中输入多行字符串:方法一:使用三引号>>> str1 = & 39;& 39;& 39;Le vent se lève, il faut tenter de vivre起风Python中输入多行字符串:方法一:使用三引号>>> str...
  • Mike Graham..439你可能想要排队 """def foo():string = """line oneline twoline three"""由于换行符和空格都包含在字符串本身中,因此您必须对其进行后处理.如果您不想这样做并且您有大量文本,则可能需要将其单独...
  • 其优点在于: 1)没有引入第三方模板,直接用Java作为模板文件 2)支持多行字符串, 且没有引入IDE插件或Maven编译插件等,通用性好。 3)支持Java方法和模板混用,模板负责存储SQL,Java负责赋值(利用ThreadLocal),互不...
  • 通过一个叫Monalisa的Eclipse插件可以实现类似CS6里面``多行字符串拼接的效果. 这里简单放个安装使用过程.GitHub有详细的安装说明,大家也可以自己看下.第一步: 先把该插件的jar包下载下来: 下载地址第二步: 把刚刚...
  • Java 六个月的版本迭代周期让我们突然间有些喘不过气来,又 Java 11 才会是一个长期支持版本,如果可能的话我们将会是从 Java 8 直接往 Java 11 ...本篇原本只是为了对 Java 11 潜在的原始字符串字面量(Raw String L...
  • 所有这些都可以与用于创建多行字符串的三重引号“”“结合使用. 在这种情况下,您可以使用: val counter = 12 val myActionID = "13682002351" val str = s"""{ "actionId": $myActionID , "jConfig": "{\"wflow\":...
  • Python uuid4,如何限制唯一字符的长度 - python 在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢...
  • 注意:如果这是一个非常简单的问题,我很抱歉,但我有点强迫我的代码格式我有一个类,它有一个函数,它返回一个字符串,该字符串将构成电子邮件的正文。我想要这个文本格式,这样它看起来在电子邮件中是正确的,但也...
  • 参见英文答案 > String formatting in Python 9个 所以我将此作为邮件发送脚本的一部分: try: content = (... 我实际上有一些脚本,在多行字符串中使用变量可能很有用,但你明白了. 有没有办法让这项工作? 提前致谢!
  • 定界符是可以赋值多行字符串给一个变量,使用方法如下//把多行文本赋值给$mb54818这个变量;$mb54818=<<//这里是赋值的多行字符串,原格式会全部保留;//如果多行字符串中有PHP变量例如$title,就会先...
  • def main(): root = Tk() # 注意Tk的大小写 the_label = Label(root, text='博客园\n行初心---', justify=LEFT, # 字符串进行左对齐 ) # 这句不可少呀 the_label.pack() mainloop() root.mainloop() if __name__ == ...
  • C语言多行字符串eof问题如何解决?#includevoid main(){ printf("input a sentence \n");char a[80],*p;int i=0,lowercase=0,uppercase=0,space=0,tab=0,enter=0;printf("ps: input ctrl+z to end of the input and ...
  • 我有一个类,其函数返回一个字符串,该字符串将构成电子邮件的正文.我希望这个文本格式化,以便它在电子邮件中看起来正确,但也因此它不会使我的代码看起来很时髦.这就是我的意思:class Something{public function ...
  • Qt_多行字符串、R“()

    2021-08-24 13:48:04
    如果有一个 很长的“单行“ 字符串: aaabbbcccdddeee...,如果放在一行,显然放不下。 const char * str = "aaa" "bbb" "ccc"; 这种写法, 就是把所有双引号里的内容,拼接起来。 但有个不方便的点是: ...
  • python输入多行字符串的方法总结

    千次阅读 2021-01-29 16:05:17
    Python中输入多行字符串:方法一:使用三引号>>> str1 = '''Le vent se lève, il faut tenter de vivre.起风了,唯有努力生存。(纵有疾风起,人生不言弃。)'''>>> str1'Le vent se lève, il ...
  • 我在Jenkins管道工作(v2.7.1),我想打印多行字符串参数(Params)的每个元素,每行有3个字符串:Foo,Bar,Baz作为输入.所以我尝试了以下语法(使用split和每个):Params.split("\\r?\\n").each { param ->println ...
  • 问题:编写程序,统计每行字符串中若干整数和,每行字符串中整数的分隔符可能有逗号“,”、分号,“;”和空格,有多少行就求多少行。 输入格式:任意输入若干行由整数构成的字符串(回车换行),整数间以逗号或...
  • 我想在多行字符串中匹配整行(这段代码是检查正确输出格式的单元测试的一部分)。在Python 3.5.2 (default, Nov 12 2018, 13:43:14)[GCC 5.4.0 20160609] on linuxType "help", "copyright", "credits" or "license" ...
  • 在string s = """ output/directory/366d595b-23b2-435d-8dc6-698b3d0844b9/result.csv scores=[{"base_score": 0.92,"metric": "ACCURACY"}]"""Script#1(script1.py)-由一个解析字符串的函数组成^{pr2}$Script#...
  • a = ''' 浙M55555 浙A11111 浙A44443 浙M55555 浙A11111 浙M55555 浙A56688 ...b = a.replace('\n' , ',').strip(',').split(',') # 将替换后的字符串,将“,”分隔的字符串转为列表 print(b) print(li
  • 问题一个多行字符串,"asfdb;\nwesfpjoing;\nwbfliqwbefpwqufn\nasfdwe\nsafewt\nqwern\nvar\ntgwtg\n\nftwg\n"现在要在"qwern"这一行后插入一行“xxxyyy”,如何做?思路将该字符串以\n切分变为字符串数组。遍历该...
  • 如果范围可能不同,并且如果我们可以将“^-\s”作为开始和停止删除空行的标志,那么您可以使用正则表达式。在import res = '''This is the first line:- this is the third line- this is the fourth line- this is ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 240,761
精华内容 96,304
关键字:

多行字符串

友情链接: eg.zip