vb.net 中英文数字符号的截取部分字符串
假如有一个地址
浙江省 山州市 在清有 有一镇上溪有路350号一回上花园东在门往共300米在(312345)
我要从右边往左边取24个字符
东在门往共300米在(312345)
刚才在东字的一半,东字就不完整,截取出来就会变成乱码,像这种情况便往右移一位,避免掉乱码,最终结果要是
在门往共300米在(312345)
也就是最终取23位
这样如何操作.vb.net winfrom 2010
[解决办法]
Dim ary = "浙江省 山州市 在清有 有一镇上溪有路350号一回上花园东在门往共300米在(312345)".Reverse().ToList()
Dim sb As New StringBuilder()
Dim count As Integer = 0
While count < 24
Dim c = ary.First()
If Convert.ToInt32(c) < &Hff Then
count -= 1
End If
count += 2
sb.Append(c)
ary.RemoveAt(0)
End While
Console.WriteLine(String.Join("", sb.ToString().Reverse().ToArray()))
Dim s As String = "浙江省 山州市 在清有 有一镇上溪有路350号一回上花园东在门往共300米在(312345)"
Dim part As String = Microsoft.VisualBasic.Right(s, 18)
Dim str As String = "浙江省 山州市 在清有 有一镇上溪有路350号一回上花园东在门往共300米在(312345)"
Dim list = Regex.Match(str, "([^\x00-\xff]
[解决办法]
[\x00-\xff]{1,2}){1,24}$").Groups(1).Captures.OfType(Of Capture)().[Select](Function(t) New With { _
Key .value = t.Value, _
Key .count = Encoding.Unicode.GetBytes(t.Value).Where(Function(tt) tt <> 0).Count() _
}).ToList()
str = String.Join("", list.Skip(list.[Select](Function(t, index) If(list.Skip(index).Sum(Function(tt) tt.count) <= 24, index, -1)).First(Function(t) t <> -1)).[Select](Function(t) t.value).ToArray())
Console.WriteLine(str)