- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发一个用于化学计算的小应用程序。我正在尝试编写一个 Mol 计算器,您只需在其中输入求和公式及其数量。没有任何数字,它可以完美地工作,例如,如果我输入 NaCl
和 100
克(您在不同的文本字段中输入克),您将得到大约 1.73 mol,这是正确的解决方案。
我现在想做的是我可以添加数字,例如 Na2Cl4
。在我的方法中,字符串被正确分割,如果你打印它你会得到 ["Na", "2", "Cl", "4"]
但我不知道我怎么能取出 Int 并记住它们被分配给哪个元素(2 分配给 Na,4 分配给 Cl,因为我需要将 mol/g 乘以 2)。
我尝试了以下方法:该数字将始终位于奇数索引上(Na 位于 0、2 位于 1,Cl 位于 2、4 位于 3),因此我尝试将奇数索引处的每个元素放入一个新数组中:
var i = 0
var testarray = [String]()
for content in splitted {
if i % 2 == 0 {
}else {
testarray.append(content)
}
print(content)
i += 1
}
splitted 是包含拆分求和公式的 [String] 数组。如果我打印出内容,我得到的结果是 2 和 4,这很好,但是如果我输入例如 Na10,我得到 1 和 0,这是不好的,它也不知道它被分配给了哪个元素。
有谁知道如何解决这个问题,我可以从字符串数组中获取 Int 值并记住它们被分配给哪个元素?
提前致谢!
编辑:
这是我如何拆分字符串的代码:
let splitted = summenformel.characters.splitBefore(separator: { $0.isUpperCase }).map{String($0)}
和扩展:
extension Sequence {
func splitBefore(
separator isSeparator: (Iterator.Element) throws -> Bool
) rethrows -> [AnySequence<Iterator.Element>] {
var result: [AnySequence<Iterator.Element>] = []
var subSequence: [Iterator.Element] = []
var iterator = self.makeIterator()
while let element = iterator.next() {
if try isSeparator(element) {
if !subSequence.isEmpty {
result.append(AnySequence(subSequence))
}
subSequence = [element]
}
else {
subSequence.append(element)
}
}
result.append(AnySequence(subSequence))
return result
}
}
extension Character {
var isUpperCase: Bool { return String(self) == String(self).uppercased() }
}
最佳答案
使用正则表达式的替代方法
正则表达式搜索:
大写字母后跟可选的小写字母后跟可选的数字。
let string = "Na10Cl4"
let pattern = "([A-Z]([a-z]+)?)(\\d+)?"
let regex = try! NSRegularExpression(pattern: pattern, options: [])
let matches = regex.matches(in: string, options: [], range: NSRange(location: 0, length: string.characters.count))
for match in matches {
let elementRange = match.rangeAt(1) // capture group of the element
let element = (string as NSString).substring(with: elementRange)
print("element", element)
let quantityRange = match.rangeAt(3) // capture group of the quantity
let quantity : Int
if quantityRange.location != NSNotFound {
quantity = Int((string as NSString).substring(with: quantityRange))!
} else {
quantity = 1
}
print("quantity", quantity)
}
关于arrays - 检查并仅从字符串数组中获取 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40346662/
我需要您在以下方面提供帮助。近一个月来,我一直在阅读有关任务和异步的内容。 我想尝试在一个简单的 wep api 项目中实现我新获得的知识。我有以下方法,并且它们都按预期工作: public Htt
我的可执行 jar 中有一个模板文件 (.xls)。不需要在运行时我需要为这个文件创建 100 多个副本(稍后将唯一地附加)。用于获取 jar 文件中的资源 (template.xls)。我正在使用
我在查看网站的模型代码时对原型(prototype)有疑问。我知道这对 Javascript 中的继承很有用。 在这个例子中... define([], function () { "use
影响我性能的前三项操作是: 获取滚动条 获取偏移高度 Ext.getStyle 为了解释我的应用程序中发生了什么:我有一个网格,其中有一列在每个单元格中呈现网格。当我几乎对网格的内容做任何事情时,它运
我正在使用以下函数来获取 URL 参数。 function gup(name, url) { name = name.replace(/[\[]/, '\\\[').replace(/[\]]/,
我最近一直在使用 sysctl 来做很多事情,现在我使用 HW_MACHINE_ARCH 变量。我正在使用以下代码。请注意,当我尝试获取其他变量 HW_MACHINE 时,此代码可以完美运行。我还认为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
由于使用 main-bower-files 作为使用 Gulp 的编译任务的一部分,我无法使用 node_modules 中的 webpack 来require 模块code> dir 因为我会弄乱当
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我使用 Gridlayout 在一行中放置 4 个元素。首先,我有一个 JPanel,一切正常。对于行数变大并且我必须能够向下滚动的情况,我对其进行了一些更改。现在我的 JPanel 上添加了一个 J
由于以下原因,我想将 VolumeId 的值保存在变量中: #!/usr/bin/env python import boto3 import json import argparse import
我正在将 MSAL 版本 1.x 更新为 MSAL-browser 的 Angular 。所以我正在尝试从版本 1.x 迁移到 2.X.I 能够成功替换代码并且工作正常。但是我遇到了 acquireT
我知道有很多关于此的问题,例如 Getting daily averages with pandas和 How get monthly mean in pandas using groupby但我遇到
This is the query string that I am receiving in URL. Output url: /demo/analysis/test?startDate=Sat+
我正在尝试使用 javascript 中的以下代码访问 Geoserver 层 var gkvrtWmsSource =new ol.source.ImageWMS({ u
API 需要一个包含授权代码的 header 。这就是我到目前为止所拥有的: var fullUrl = 'https://api.ecobee.com/1/thermostat?json=\{"s
如何获取文件中的最后一个字符,如果是某个字符,则删除它而不将整个文件加载到内存中? 这就是我目前所拥有的。 using (var fileStream = new FileStream("file.t
我是这个社区的新手,想出了我的第一个问题。 我正在使用 JSP,我成功地创建了 JSP-Sites,它正在使用jsp:setParameter 和 jsp:getParameter 具有单个字符串。
在回答 StoreStore reordering happens when compiling C++ for x86 @Peter Cordes 写过 For Acquire/Release se
我有一个函数,我们将其命名为 X1,它返回变量 Y。该函数在操作 .on("focusout", X1) 中使用。如何获取变量Y?执行.on后X1的结果? 最佳答案 您可以更改 Y 的范围以使其位于函
我是一名优秀的程序员,十分优秀!