首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用split.take获取字符串序列的前n个元素?VB .net

如何用split.take获取字符串序列的前n个元素?VB .net
EN

Stack Overflow用户
提问于 2018-09-14 09:29:44
回答 2查看 596关注 0票数 0

我为AutoCAD和民用3D创建了一个AutoCAD插件。

我试图检索这些序列的第一个元素:

"Autodesk AutoCAD 2019年-绘图1“我只想获得"Autodesk AutoCAD 2019”(我想要前3个元素)和"Autodesk民用3D 2019年-绘图1“,我只想获得"Autodesk民事3D 2019”。(我要前四个元素)

我使用Process.GetCurrentProcess().MainWindowTitle获取这些序列,它正在检索我目前正在使用的应用程序的窗口标题。

但是,有时我使用AutoCAD,其他我使用民用3D,我想以字符串的形式检索他们的应用程序名,显示在消息框中,告诉我现在使用的是哪个应用程序。

我试过:

代码语言:javascript
复制
Process.GetCurrentProcess().MainWindowTitle.Substring(0, 22)

但是当我在autocad的开头或关闭时显示消息框时,这个选项是不可靠的。只有当我在开始和关闭之间显示消息框时,它才能工作。

我想我应该试试:

代码语言:javascript
复制
Process.GetCurrentProcess().MainWindowTitle.Split.Take(4)

代码语言:javascript
复制
Process.GetCurrentProcess().MainWindowTitle.Take(4)

但是,尽管我已经试图理解它,但我似乎无法让它工作(https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql/linq/return-or-skip-elements-in-a-...)。

我该怎么做?

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-14 09:55:14

我会这样做:

代码语言:javascript
复制
Dim originalString As String = Process.GetCurrentProcess().MainWindowTitle

Dim splittedString As String() = originalString.Split("-".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)

Dim productName As String = splittedString(0) 
票数 1
EN

Stack Overflow用户

发布于 2018-09-14 09:48:04

如果要使用Take,则必须确保为其提供正确的输入。如果您这样做,那么它将提供正确的输出。你知道这些输入和输出是什么吗?输入是一个IEnumerable(Of T),输出是另一个IEnumerable(Of T),它包含指定数量的项或原始列表中的所有项,而原始列表中的项都更小。

这显然是错误的:

代码语言:javascript
复制
Process.GetCurrentProcess().MainWindowTitle.Take(4)

因为MainWindowTitle是一个String,所以这意味着您的输入将是一个IEnumerable(Of Char),所以您只需要得到字符串中的前四个字符。这看起来更有希望:

代码语言:javascript
复制
Process.GetCurrentProcess().MainWindowTitle.Split.Take(4)

您是否真的检查过Split是否返回了您认为它所做的事情?当代码确实按照您的预期工作时,不要假设任何事情。检查一下。

顺便说一下,Split是一个方法,而不是一个属性。当不提供参数时,不必在方法调用上使用括号,但您是为GetCurentProcess而使用的,那么为什么不使用Split呢?矛盾总是不好的。决定你要做什么,并在每一种情况下都这样做。就我个人而言,为了清晰起见,我总是在方法调用中包括括号,无论是否存在参数。不过,我不会在没有参数的构造函数上使用它们,因为它可能与数组创建一目了然。

无论如何,正如我所说的,如果Split返回正确的输入,那么Take将提供正确的输出。问题是,你知道如何处理输出吗?你为什么要把它放进去?需要列举一个IEnumerable(Of T)才有任何用处,而您如何做到这一点完全取决于您想要得到的结果。例如,如果您想将这些子字符串重新调和到一个在它们之间有空格的String中,那么您将调用String.Join并将列表作为第二个参数传递。当然,如果您要这样做,那么您将更好地接受我的其他建议,即IndexOfSplit

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52328986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档