我必须编写一个程序,将用户的化学方程式作为输入,例如12 CO2 + 6 H2O-> 2 C6H12O6 + 12
O2,并观察两个位置上的原子量是否相同。有没有什么方法可以轻松地计算和解析?
例如:
12 CO2 + 6 H2O-> 2 C6H12O6 + 12 O2
12 * 2 + 6 * 2-> 2 * 6 + 2 * 12 + 2 * 6 + 12 * 2
在这种情况下,应该有输出“ false”。
这是我的代码,但实际上仅是尝试一些操作:
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
List<String> list = new ArrayList<String>();
String input = "";
while (!(input.equals("end"))) {
input = s.nextLine();
list.add(input);
}
list.remove(list.size() - 1);
for (int i = 0; i < list.size(); i++) {
int before = 0;
int after = 0;
String string = list.get(i);
string = besserUmwandeln(string);
System.out.println(string);
}
}
public static String besserUmwandeln(String string) {
string = string.replace("-", "");
string = string.trim().replaceAll(("\\s+"), " ");
string = string.replace(' ', '*');
StringBuilder builder = new StringBuilder(string);
System.out.println(string);
for (int k = 0; k < builder.length(); k++) {
if (Character.isUpperCase(builder.charAt(k))) {
builder.setCharAt(k, ':');
}
if (Character.isLowerCase(builder.charAt(k))) {
builder.setCharAt(k, '.');
}
if (Character.isDigit(builder.charAt(k))) {
} else {
}
}
for (int j = 0; j < builder.length(); j++) {
if (j < builder.length() && builder.charAt(j) == ':' && builder.charAt(j + 1) == '.') {
builder.deleteCharAt(j + 1);
}
}
for (int i = 0; i < builder.length(); i++) {
if (i < builder.length() - 1 && builder.charAt(i) == ':' && builder.charAt(i + 1) == ':') {
builder.deleteCharAt(i);
}
}
for (int i = 0; i < builder.length(); i++) {
if (i < builder.length() - 1 && builder.charAt(i) == '+' && builder.charAt(i + 1) == '*') {
builder.deleteCharAt(i + 1);
}
}
for (int i = 0; i < builder.length(); i++) {
if (i < builder.length() - 1 && builder.charAt(i) == '*' && builder.charAt(i + 1) == '+') {
builder.deleteCharAt(i);
}
}
for (int i = 0; i < builder.length(); i++) {
if (i < builder.length() - 1 && builder.charAt(i) == '*' && builder.charAt(i + 1) == '>') {
builder.deleteCharAt(i);
}
}
for (int i = 0; i < builder.length(); i++) {
if (i < builder.length() - 1 && builder.charAt(i) == '>' && builder.charAt(i + 1) == '*') {
builder.deleteCharAt(i + 1);
}
}
for (int i = 0; i < builder.length(); i++) {
if (i < builder.length() - 1 && builder.charAt(i) == '*' && builder.charAt(i + 1) == ':') {
builder.deleteCharAt(i + 1);
}
}
return builder.toString();
}
因此,每次我需要解析一些文本时Java
,我最终只会使用Regex
。因此,我建议您也这样做。
您可以在regex101.com上测试正则表达式。
并且还可以轻松地用于Java
:
final inputText = ...
final Pattern pattern = Patern.compile("Some regex code");
final Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println(matcher.group(0));
}
在内部,Regex
您可以使用(
和定义捕获组,)
然后通过捕获结果matcher.group(int)
。
例如,您可以先使用分隔方程式(.*) -> (.*)
。
使用左,右组,然后循环find
使用:(\d+) (\w+)(?: \+| -|$)
。
之后,您可以使用group(1)
金额和group(2)
元素。
并且如果需要,还可以使用来迭代第二组(元素)以获取精确的元素分布(\w)(\d?)
。然后,第一组是元素,例如,对于文本,CO2
它产生两个匹配项,第一个匹配项group(1) -> C
没有第二个匹配项。第二个命中有group(1) -> O
和group(2) -> 2
。
在此处测试您的正则表达式:regex101#Q6KMJo
我想组成一个Reactor链,基本上可以做到以下几点: 验证提交的属性,例如,的长度或的有效性。我会使用下面的验证器。 验证提交的是否已被其他人使用。为此,我将使用反应性存储库。 保存,如果以上所有验证检查都通过。 用户: 反应性存储库: 验证器: 处理程序方法: 助手方法: 从被动的角度来看,我不确定如何实现这一目标。理想情况下,反应链将有3个步骤映射到上面的点。 这是我尝试过的,但我在方法参数
问题内容: 我正在尝试从网站上抓取数据。该网站使用Facebook的React。因此,我可以使用Jaunt解析的源代码与使用Chrome的检查器检查元素时看到的代码完全不同。 我对这一切知之甚少,但是经过一些研究,我认为这与DOM而不是源代码有关。我需要一种方法来使用此DOM代码,因为原始源不包含任何我想要的内容,但我不知道从哪里开始(即使在这里已经阅读了很多答案)。 这是我要抓取的页面之一的示例
我的Java应用程序“A”正在从另一个Java应用程序获取移动电话号码作为字符串。因此,在应用程序A获得手机号码字符串后,我需要验证该手机号码字符串中是否只有数字。为了验证我使用了如下的简单逻辑, 我正在检查I=1,因为国家代码的第一个字符将是“”。这种方法是O(n)。还有另一种方法,我们可以使用。这将抛出<代码> No.MultFrimeExtry,以便我们可以捕获并考虑它是一个字母数字字符串。
我正在尝试使用 来为我的 react 应用程序的一小部分提供服务。我有两个部分(和),但我只对部分有顾虑。 我尝试了以下方法: > 在根目录下创建文件 我添加了来忽略babel,因为我无法使它导入文件,它不断抛出: 。 但是,每次我运行webpack时,它都会抛出诸如以下的错误: 位于这个根文件夹中。
问题内容: 我有一个字符串,其内容是XML。我想将标签分开,并使其成为Java中的字符串列表。以下是我正在尝试的东西: 我想将其分为以下列表: 我试图通过JAXB处理器执行此操作,但效果不佳。还使用split尝试了一些愚蠢的逻辑,但这也无济于事。还有其他方法可以做到这一点吗? 问题答案:
我是java和objectMapper的新手。我正在尝试解析json字段,该字段可能具有两种类型,它可能是字符串或数组。 例如: 或 类示例: 我使用objectMapper来反序列化json,当“full_name”字段有一个字符串时可以正常工作,但是当数组到达时,数组无法反序列化。 这个想法是,当到达一个字符串时,将值放在属性中,但当到达数组时,将数组元素连接为字符串(String.join