如果可能的话,如何将字符串转换为int?

时间:2016-02-02 16:29:04

标签: powershell powershell-v4.0 azure-devops

我从VSO(使用TFPT.exe)获取一个字符串,该字符串可以是项目编号或项目编号加上字母

“830”或“830a”

如果信件存在,我该如何中断 - 并将数字转换为int

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = PatchedSpringockitoContextLoader.class, locations = {
    "classpath:/config.xml"
})
...
@Autowired
@WrapWithSpy
private MyService myService;
...
@Before
public void setup() {
    initMocks(this);
    ...
}
...
@Test
public void test() {
    // run the process that may or may not call the service
    verify(myService, never()).myMethod(any(MyParam.class));
}

我试图测试“830”是否是一个数字 - 但我想因为它将其作为一个字符串拉入,我不知道该怎么问:这个字符串可以是一个int吗?

2 个答案:

答案 0 :(得分:3)

假设只有一组数字,-match可以很容易地使用正则表达式。其中\ d +将匹配一组连续数字。

PS C:\temp> "830a" -match "\d+"
True

PS C:\temp> $matches[0]
830

知道你可以在你的代码中加入这样的东西。

$b = If($a -match "\d+"){[int]$matches[0]}

显然,使用更好的变量名更合适,但这只是概念的证明。如果字母字符位于字符串的中间,那么写入会导致问题。只要数字组合在一起,它将以任何一种方式工作。

另一种方法是替换所有不是数字的字符。

$a = "830adasdf"
$a = $a -replace "\D" -as [int]

\ D表示任何非数字字符。 -as [int]将执行演员表演。

在任何一种情况下,[int]都会将剩余的数字字符串转换为整数。

如果你可以保证它只是末尾的一个字符,那么你也可以使用字符串方法.TrimEnd()。它删除由char数组确定的字符串末尾的所有字符。让我们给它一个所有字母的数组。在实践中,这是一个案例的问题,所以我们采取字符串,将其转换为大写,然后删除任何尾随字母。

"830z".ToUpper().TrimEnd([char[]](65..99)) -as [int]

它实际上似乎是自动将数字数组转换为char,所以这只会做同样的

"830z".ToUpper().TrimEnd(65..99) -as [int]

答案 1 :(得分:0)

这是我能够提出的最佳选择,接缝工作:不会以最有效的方式缝合...

    $t = $parent.Substring($parent.Length-1)
if($t -in @("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"))
{
    [int]$parentSRP = $parent.Substring(0,$parent.Length-1)
    $parentVer = $parent.Substring($parent.Length-1,1)
}
else{[int]$parentSRP = $parent}