如何在vb.net中拆分字符串名称

如何在vb.net中拆分字符串名称,vb.net,Vb.net,编辑:很抱歉我写的不清楚的困境 我已将名称更改为2015-02-12a00.12.20a67,请注意,我这里的名称只是我将从文件夹中读取的图像文件名的一个示例。我唯一的要求就是输出。我希望将文件名分为三个日期、时间和速度,以便将它们存储到数据库中 str1 = 2015-02-12 str2 = 00:12:20 str3 = 67 如何在vb.net中实现这一点?我找到了这个密码 Dim TestString As String = "apple pear banana " Dim Te

编辑:很抱歉我写的不清楚的困境

我已将名称更改为2015-02-12a00.12.20a67,请注意,我这里的名称只是我将从文件夹中读取的图像文件名的一个示例。我唯一的要求就是输出。我希望将文件名分为三个日期、时间和速度,以便将它们存储到数据库中

str1 = 2015-02-12
str2 = 00:12:20
str3 = 67
如何在vb.net中实现这一点?我找到了这个密码

Dim TestString As String = "apple pear banana  " 
Dim TestArray() As String = Split(TestString)
Dim LastNonEmpty As Integer = -1

For i As Integer = 0 To TestArray.Length - 1
    If TestArray(i) <> "" Then
        LastNonEmpty += 1
        TestArray(LastNonEmpty) = TestArray(i)
    End If 
Next 
但这不是为了我的需要。 任何人请帮助我。

基于:

.NET 4.5

使用拆分的VB.NET程序

Module Module1

Sub Main()
' We want to split this input string
Dim s As String = "2015-02-12a00.12.20a67"

' Split string based on spaces
Dim words As String() = s.Split(New Char() {"a"c})

' Use For Each loop over words and display them
Dim word As String
For Each word In words
    Console.WriteLine(word)
Next
End Sub

End Module
输出

2015-02-12
00.12.20
67
我想这对你会有很大帮助。
这是链接

我想这就是你要找的:

Dim input = "image2015021400122067"
Const Prefix = "image"
Const YearLength = 4
Const NonYearDateTimeFieldLengths = 2
Dim year = input.Substring(Prefix.Length, YearLength)
Dim month = input.Substring(Prefix.Length + YearLength, NonYearDateTimeFieldLengths)
Dim day = input.Substring(Prefix.Length + YearLength + NonYearDateTimeFieldLengths, NonYearDateTimeFieldLengths)
Const DateSeparator = "-"c
Dim str1 = String.Join(DateSeparator, {year, month, day})
Dim hours = input.Substring(CInt(Prefix.Length + YearLength + NonYearDateTimeFieldLengths * 2), NonYearDateTimeFieldLengths)
Dim minutes = input.Substring(CInt(Prefix.Length + YearLength + NonYearDateTimeFieldLengths * 3), NonYearDateTimeFieldLengths)
Dim seconds = input.Substring(CInt(Prefix.Length + YearLength + NonYearDateTimeFieldLengths * 4), NonYearDateTimeFieldLengths)
Const TimeSeparator = ":"c
Dim str2 = String.Join(TimeSeparator, {hours, minutes, seconds})
Dim str3 = input.Substring(CInt(Prefix.Length + YearLength + NonYearDateTimeFieldLengths * 5), NonYearDateTimeFieldLengths)
请注意,此代码做出了一些假设:

您的字符串将始终以图像开头, 字段的宽度始终相同,即年份始终为4个字符duh!其他日期/时间字段将为2个字符,如有必要,将以零填充,就像您提供的输入字符串一样。
您可以使用DateTime.ParseExact和字符串格式

    Dim datex = "Image2015021400122067"

    Dim dt = DateTime.ParseExact(datex, "'Image'yyyyMMddhhmmssff", Nothing)

    Dim s1 = dt.ToString("yyyy-MM-dd")

    Dim s2 = dt.ToString("HH:mm:ss")

    Dim s3 = dt.ToString("ff")
不需要使用子字符串,在格式模式中忽略图像
你可以在这里测试它

当你说str1=2015-02-12时,你真的是指str1=2015-02-14吗?你发现的代码与你的问题并不特别相关。此外,您的问题还不清楚-字符串是否总是采用这种格式?在这种情况下,可能就是你所需要的。如果图像部分是可变的,则可能需要其他内容。例如,我没有删除图像,我将把它留给您。@JAT这将是一个很好的答案。@JAT-不完全是OP想要的输出。输出12:12:20而不是00:12:20的时间。如何??split是最常用的函数,你必须传递spliting字符,这里我传递了一个spliting字符的空格看看他的第一句话。代码块是他找到的一些对他没有好处的代码。@MuhammadBashir-很抱歉,但你对此完全困惑。垃圾输入,垃圾输出。@Puropoix因为这实际上接近要求的值,所以只想将c换成ac。我编辑了我的问题@jat。。嗯,还有文件名的格式..: