VB.NET 定义多行文本字符的几种方式
vbCrLf
在 .NET 刚刚推出的时候,VB作为一款被微软用来“衬托”C#的语言,在许多细节设计上远不如C#方便。
比如在C#中写一个多行文本,就有各种方式:
string s1 = "我是一个多行文本\n这是第二行";
string s2 = @"我是一个多行文本
这是第二行";
string s3 =
@"我是一个多行文本
这是第二行";
可以看出C#在字符的赋值写法上十分灵活多变,然而你若是想用VB写一个多行文本,那可废了老劲了:
Dim s1 As String = "我是一个多行文本" & vbCrLf & "这是第二行"
Dim s2 As String = "我是一个多行文本" & vbCrLf & _
"这是第二行"
Dim s3 As String = _
"我是一个多行文本" & vbCrLf & _
"这是第二行"
因为VB没有转义符,而且当时的VB也不支持字符串内的换行功能,所以只能采用 vbCrLf
来连接字符。
如果想要连接下一行的代码,还需要在行末添加一个 _
字符,十分的繁琐!
可是别忘了,现在都9102年了,VB早已经克服了不支持多行文本的缺点!
让我们看看现在如何利用VB的语法来定义多行文本吧!
VS语法糖
首先,请先确定你所使用的VS版本,只要版本够新的话,VS的IDE就自动具备了多行文本的智能连接功能,所以下面的代码是可以直接运行的!
Dim s As String =
"我是一个多行文本
这是第二行"
MsgBox(s)
然而需要注意的是,==这种语法只是VS的语法糖而已,并不是合法的VB代码!==
你利用上面的代码用VBC的编译器是无法编译完成的,所以我还将介绍另一个更神奇的多行文本方法!
String Tag
下面的方法仅适用于 .NET 3.5
以后的平台,低于该版本的.NET无法编译与识别。
代码如下:
Dim s As String = <string>我是一个多行文本
这是第二行</string>
MsgBox(s)
只需将字符串的声明符号 "..."
换成 <string>...</string>
这个XML标签,即可让我们的VB代码支持多行文本!
需要注意的是,被 <string>
包裹的内容是包含空白符的,所以不要留下多余的空格与空行。
内部的文本支持HTML转义符,所以 <
符号需要以 <
表示,>
需要以 &rt;
来表示。
XML中的转义符
字符 | 转义符 |
---|---|
< | < |
> | > |
& | & |
' | ' |
" | " |
(其中只有 <
与 &
是非法字符,需要严格转义,但还是建议您将其他符号也一并转义。)
如果你的文本中包含大量需要转义的字符,则可以直接使用 XML CDATA 来包覆文本
Dim s As String = <string><![CDATA[&我是一个多行文本&
<我么得感情!>]]></string>
Msgbox(s)
其中被CDATA所包裹的文本可以自由使用各种需要转义的特殊字符,除了结尾的]]>
之外!
LINQ XML
最后的最后,再来介绍一个小技巧:
' 定义一个结构原型
Structure xtag
Sub New(ByVal p As String, ByVal c As String)
Me.prop = p
Me.cont = c
End Sub
Dim prop As String
Dim cont As String
End Structure
Dim xtags As xtag() = {New xtag("属性", "内容"), New xtag("test", "hello world")}
' 创建一个LINQ XML元素
Dim linqxml As Xml.Linq.XElement =
<xml>
<title>内嵌XML对象演示</title>
<%= From x In xtags
Select <xtag type=<%= x.prop %>><%= x.cont %></xtag>
%>
<endtag>结束XML</endtag>
</xml>
MsgBox(linqxml.ToString)
原来在VB.NET中的XML标签(并非一定得是xml作为根标签)可以直接定义一个Linq.XElement
对象,而且其内部可以利用LINQ + ASP.NET
的语法对元素进行操作和赋值,十分的方便!
输出的内容
<xml>
<title>内嵌XML对象演示</title>
<xtag type="属性">内容</xtag>
<xtag type="test">hello world</xtag>
<endtag>结束XML</endtag>
</xml>
===
本文首发于 https://blog.clso.fun/posts/2019-04-23/vb-net-multi-line-string.html
VB.NET 定义多行文本字符的几种方式的更多相关文章
- Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式
解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式.面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和Out ...
- PHP如何实现数据类型转换(字符转数字,数字转字符)(三种方式)
PHP如何实现数据类型转换(字符转数字,数字转字符)(三种方式) 一.总结 一句话总结: 1.强制转换:(int) (bool) (float) (string) (array) (object) 2 ...
- Spring Boot 定义系统启动任务,你会几种方式?
在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( ...
- char wchar 互转 多字符 宽字符 的N种方式
1: 用 CString 如果没有mfc 可以用 ATL 中的 CString #include <atlstr.h> CStringA v1 = "111&quo ...
- PHP定义字符串的四种方式
1.简介 在PHP中这门语言中,因为是弱类型语言,因此使用变量时不需提前定义即可使用. 我们在使用php进行开发的时候,大多数使用双引号.单引号进行定义字符串.既然有这两种方式,那么他们之间肯定是有区 ...
- javaScript中定义类或对象的五种方式
第一种方式: 工厂方法 能创建并返回特定类型的对象的工厂函数(factory function). function createCar(sColor){ var oTempCar = new Obj ...
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
js replace 全局替换 js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...
- Javascript定义类(class)的三种方法
将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
随机推荐
- 星级评分原理 N次重写的分析
使用的是雪碧图,用的软件是CSS Sprite Tools 第一次实现与分析: <!DOCTYPE html> <html> <head> <meta cha ...
- python——元组和字典类型简明理解
元组类型: 元祖创建: 不需要括号可以但是一个元素就当成了字符串类型了 >>> tup1="a"; >>> type(tup1) <cla ...
- 富文本编辑器summerNote
载入富文本: $('.summernote').summernote({ height: 220, tabsize: 2, lang: 'zh-CN' }); 富文本获取内容: $('.summern ...
- python多线程简单爬虫
爬虫本质就是将网站或者接口的数据经过筛选后按需求保存 这里实现一个简单爬虫仅供参考 import requests import bs4 import threading import queue i ...
- Vue watch的高级用法
<div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type="text& ...
- hdu 4714 树+DFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4714 本来想直接求树的直径,再得出答案,后来发现是错的. 思路:任选一个点进行DFS,对于一棵以点u为 ...
- C/S和B/S架构
1.C/S架构(Client/Server结构,熟知的客户机和服务器结构),它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统 ...
- @RequestBody配合@JsonFormat注解实现字符串自动转换成Date
2018年08月28日 16:41:15 混合动力火锅 阅读数:440 在controller中使用@RequestBody可以自动将字符串转换成int或者将int转换成字符串,但是Date类型则 ...
- 【转载】重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor ...
- [leetcode]341. Flatten Nested List Iterator展开嵌套列表的迭代器
Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...