vb.net - 是否可以从星期一的字符串输出第一个字符,然后在星期二输出下一个字符(依此类推)?

时间:2018-01-18 05:50:55

标签: string vb.net substring dayofweek

我有一个包含特殊字符的字符串('★☆☽☾☁')我希望★打印出星期一,☆星期二,☽星期三,☾星期四, ☁星期五。我很抱歉,因为我对vb.net很新,所以我对它只有非常基本的了解。我已经尝试过了:

Dim today As Date = Date.Today
    Dim dayIndex As Integer = today.DayOfWeek
    Dim specialcharacters() As Char = "★☆☽☾☁"
    If dayIndex < DayOfWeek.Monday Then
        txtRandomCharacter.Text = specialcharacters
    End If

如果有人能提供帮助,我将非常感激,谢谢!

2 个答案:

答案 0 :(得分:0)

(重新编辑以更正我以前使用VBA而不是VB.net的错误)

是。注意到你的数组中只有5个Char(specialcharacters())我假设你只想标记星期一到星期五。但是,这个问题的答案可以延伸到整周。使用原始代码作为基础:         Dim txtRandomCharacter As Char =“”

    Dim specialcharacters() As Char = "★☆☽☾☁"
    Dim today As Date = Date.Today
    Dim dayIndex As Integer = today.DayOfWeek
    If (dayIndex - 1) <= UBound(specialcharacters) Then
        txtRandomCharacter = specialcharacters(dayIndex - 1)
    End If

但是,请注意处理基于0的阵列所需的心理体操。

Dim dayIndex As Integer = Weekday(today,vbMonday)也是有效的代码。 可以在http://www.excelfunctions.net/vba-weekday-function.html找到Weekday的说明。

specialcharacters是一个数组,而不是字符串,因此您可以直接访问数组元素。我已经使用了UBound函数,因此通过调用高于数组的下标(dayIndex),您不会意外地获得数组越界错误。

另一种选择是将MidSubstr函数与字符串一起使用。在这个例子中,为了简洁,我还连接了一些代码。

    Dim txtRandomCharacter As String = ""
    Const specialcharacters As String = "★☆☽☾☁"
    Dim dayIndex As Integer = Date.Today.DayOfWeek ' - DayOfWeek.vbMonday + 1 
    txtRandomCharacter = If(dayIndex >= 0 And dayIndex <= Len(specialcharacters), specialcharacters.Substring(dayIndex - 1, 1), "X")

IIF声明中的'X'选项是我的测试补充。你也可以使用“”。不幸的是,VB.Net中的Substr函数比Mid函数的容忍度稍差,因此对dayIndex的有效值进行了额外的检查。 Substr基于0。

使用容忍索引的Mid函数&gt;字符串的长度但必须> 0(因此If语句):

    Dim txtRandomCharacter As String = ""
    Const specialcharacters As String = "★☆☽☾☁"
    Dim dayIndex As Integer = Date.Today.DayOfWeek ' - DayOfWeek.vbMonday + 1 
    txtRandomCharacter = Mid(specialcharacters, If(dayIndex > 0, dayIndex, Len(specialcharacters) + 1), 1)

检查您的Option Base以确定您的阵列默认情况下是0还是1开始。specialcharacters()的范围可以是0-4或1-5,具体取决于此设置 - 这意味着可能或可能不与Weekday函数对齐,该函数始终在1-7范围内(或DayofWeek函数,范围从0到6)。

关键是要理解字符串和字符数组之间的区别。

  • 使用数组 - 使用数组下标选择正确的成员。检查以确保您没有传递超出阵列范围的索引。
  • 使用字符串,使用MidSubstr函数从字符串中获取字符。检查以确保您没有传递超出范围的索引。

要认识到的另一点是要了解如何列举一周的日子。 MSDN参考站点仅记录枚举,并且不提供等效整数 - IDE提供了更多信息。了解您的计算是从0还是1开始,以及是否必须调整索引以解决此问题,这一点非常重要。

答案 1 :(得分:0)

这是怎么回事?

Const specialcharacters() As Char = "★☆☽☾☁"
Dim today As Date = Date.Today
Dim dayIndex As Integer = today.DayOfWeek 

If dayIndex >= DayOfWeek.Monday andalso dayIndex <= DayOfWeek.Friday Then
    txtRandomCharacter.Text = specialcharacters(dayIndex - dayOfWeek.Monday)
End If

这是有效的,因为DayOfWeek.Monday到DayOfWeek.Friday的值是连续的。