Java-检查字符串是否只包含某些字符(即DNA/RNA)

Java-检查字符串是否只包含某些字符(即DNA/RNA),java,regex,string,Java,Regex,String,我在和正则表达式斗争 我想做这样的东西: if (sequence.matches(A|T|G|C)){ String type = "DNA" } elseif (sequence.matches(A|U|G|C)){ String type = "RNA" } 因此,如果序列仅为A、T、G或C,则类型仅设置为DNA;如果序列为A、U、G或C,则类型设置为RNA if (sequence.matches("[ATGC]+")) { // + for one or more occurrenc

我在和正则表达式斗争

我想做这样的东西:

if (sequence.matches(A|T|G|C)){
String type = "DNA"
}
elseif (sequence.matches(A|U|G|C)){
String type = "RNA"
}

因此,如果序列仅为A、T、G或C,则类型仅设置为DNA;如果序列为A、U、G或C,则类型设置为RNA

if (sequence.matches("[ATGC]+")) { // + for one or more occurrences, * for zero or more occurrences
另一张支票也是一样

else if (sequence.matches("[AUGC]+")) { // + for one or more occurrences, * for zero or more occurrences

此外,您还需要在双引号
中指定字符串,如果(str.matches(“strInDoubleQuotes”)
您可以使用下面的正则表达式

if (sequence.matches("[ATGC]+")) { // + for one or more occurrences, * for zero or more occurrences
另一张支票也是一样

else if (sequence.matches("[AUGC]+")) { // + for one or more occurrences, * for zero or more occurrences

另外,您需要在双引号
中指定字符串if(str.matches(“strInDoubleQuotes”)
正常表达式应该是:
“[ATGC]+”
,它与
A
T
G
C
匹配。表达式
[ATGC]
已知为输入字符串应匹配的对象。表达式
X+
表示表达式
X
出现一次或多次

"ATCCGT".matches("[ATGC]+")

正常表达式为:
“[ATGC]+”
,与
A
T
G
C
匹配。表达式
[ATGC]
已知为输入字符串应匹配的对象。表达式
X+
表示表达式
X
出现一次或多次

"ATCCGT".matches("[ATGC]+")

无论使用哪种编程语言,所需的正则表达式都应测试字符串从头到尾只包含感兴趣的字符:

^[ACGT]+$
^
表示“字符串的开头”<代码>[ACGT]表示这4个字母中的一个<代码>+表示这些字符中必须有一个或多个<代码>$表示“字符串结束”


这意味着您的字符串中只能有A、C、G或T,并且必须至少有一个。

无论使用哪种编程语言,您想要的正则表达式都应该测试字符串从头到尾只包含感兴趣的字符:

^[ACGT]+$
^
表示“字符串的开头”<代码>[ACGT]表示这4个字母中的一个<代码>+表示这些字符中必须有一个或多个<代码>$表示“字符串结束”


这意味着字符串中除了A、C、G或T之外必须没有任何内容,并且其中必须至少有一个。

集合论将规定这种简化:

String type = (sequence.contains("U")) ? "RNA" : "DNA";    
String type = (sequence.contains("T")) ? "DNA" : "RNA";

没有?坦白地说,我甚至不确定你需要两个表达式。

集合论会要求这种简化:

String type = (sequence.contains("U")) ? "RNA" : "DNA";    
String type = (sequence.contains("T")) ? "DNA" : "RNA";

没有?坦白地说,我甚至不确定您是否需要两个表达式。

正则表达式可能不是您最有效的选择:

static boolean consistsOf(String s, String of) {
  for ( int i = 0; i < s.length(); i++ ) {
    if ( of.indexOf(s.charAt(i)) == -1 ) {
      return false;
    }
  }
  return true;
}
static boolean consistsOf(字符串s,字符串of){
对于(int i=0;i
正则表达式可能不是最有效的选择:

static boolean consistsOf(String s, String of) {
  for ( int i = 0; i < s.length(); i++ ) {
    if ( of.indexOf(s.charAt(i)) == -1 ) {
      return false;
    }
  }
  return true;
}
static boolean consistsOf(字符串s,字符串of){
对于(int i=0;i
使用
“[ATGC]+”
“[AUGC]+”
。您尝试了什么?(对问题的约束放松将允许您仅测试T和U)。@njzk2但前提是您不想检查序列中是否有不允许的字符。:)使用
“[ATGC]+”
“[AUGC]+”
。您已经尝试了什么?(对问题的约束放松将允许您仅测试T和U)。@njzk2但前提是您不想检查序列中是否有不允许的字符。:)<当使用
字符串匹配()时,code>^
$
是不必要的。当使用
字符串匹配()时,code>^
$
是不必要的。可能会生成一个表达式或一个带有未知或无效默认大小写的开关。是的,没错,我猜他正在扫描自己的数据,哥们儿。可以用一个表达式或一个带有未知或无效默认大小写的开关。是的,没错,我猜他在扫描自己的数据,哥们儿。