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



我有一个包含特殊字符('★☆☽☾☁')的字符串,我想打印出★星期一,☆星期二,☽星期三,☾星期四和☁星期五。 我很抱歉,因为我对 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

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

这是怎么回事?

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 的值是连续的。

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

是的。注意到您的数组中只有 5 个字符 (specialcharacters()),我假设您只想标记星期一到星期五。但是,这个问题的答案可以扩展到涵盖整个星期。使用原始代码作为基础: 将 txtRandomCharacter 暗为 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)也是有效的代码。 有关Weekday的说明,请参阅 http://www.excelfunctions.net/vba-weekday-function.html。

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函数,该函数容许索引>字符串的长度,但必须> 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 之间,具体取决于此设置 - 这意味着可能与始终在 1-7 范围内的Weekday函数(或范围为 0 到 6 的DayofWeek函数)对齐也可能不一致。

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

  • 使用字符数组 - 使用数组下标选择正确的成员。检查以确保您没有传递数组越界的索引。
  • 对于字符串,使用MidSubstr函数从字符串中获取字符。 检查以确保您没有传递越界的索引。

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

最新更新