Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中获取字符串的回文_Java_Charat - Fatal编程技术网

如何在Java中获取字符串的回文

如何在Java中获取字符串的回文,java,charat,Java,Charat,好的。我知道还有其他几个很好的程序可以检查字符串是否为回文。 但我正在尝试这段代码。问题是,由于我正在逐个字符检查,每次字符匹配时,它都会打印出来 回文 但是我只想打印一次回文 有没有一种方法可以让我完全遍历循环,然后执行print语句 import java.util.Scanner; public class Solution{ public static void main(String[] args){ Scanner scan = new Scanner(System.in);

好的。我知道还有其他几个很好的程序可以检查字符串是否为回文。
但我正在尝试这段代码。问题是,由于我正在逐个字符检查,每次字符匹配时,它都会打印出来
回文

但是我只想打印一次回文

有没有一种方法可以让我完全遍历循环,然后执行print语句

import java.util.Scanner;
public class Solution{
public static void main(String[] args){
    Scanner scan = new Scanner(System.in);
    String A = scan.next();

    for(int i =0;i<(A.length()/2);i++)
    {
        if(A.charAt(i)==A.charAt(A.length()-i-1))
            System.out.println("palindrome");
        else
            System.out.println("not palindrome");

    }
  }
}
import java.util.Scanner;
公共类解决方案{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
字符串A=scan.next();

对于代码中的(int i=0;i,将前半部分字符与后半部分字符进行检查,并在每个字符上打印
回文
/
非回文

相反,您应该遍历整个字符串,确定整个字符串是否为回文,然后在最后打印一次

以下是修复代码的简单方法:

// At the start, we assume the string is a palindrome.
boolean palin = true;

// We loop through the characters, looking for evidence to contradict our
// assumption. Once palin becomes false, it can never become true again.
for(int i =0;i<(A.length()/2);i++)
{
    if(A.charAt(i)!=A.charAt(A.length()-i-1))
        palin = false;
}

// Now the Boolean variable tells us the answer we want.
if (palin) System.out.println("palindrome");
else System.out.println("not palindrome");
//开始时,我们假设字符串是回文。
布尔佩林=真;
//我们在人物中循环,寻找与我们的观点相矛盾的证据
//假设。一旦佩林变假了,它就再也不会变真了。

对于代码中的(int i=0;i,将前半部分字符与后半部分字符进行检查,并在每个字符上打印
回文
/
非回文

相反,您应该遍历整个字符串,确定整个字符串是否为回文,然后在最后打印一次

以下是修复代码的简单方法:

// At the start, we assume the string is a palindrome.
boolean palin = true;

// We loop through the characters, looking for evidence to contradict our
// assumption. Once palin becomes false, it can never become true again.
for(int i =0;i<(A.length()/2);i++)
{
    if(A.charAt(i)!=A.charAt(A.length()-i-1))
        palin = false;
}

// Now the Boolean variable tells us the answer we want.
if (palin) System.out.println("palindrome");
else System.out.println("not palindrome");
//开始时,我们假设字符串是回文。
布尔佩林=真;
//我们在人物中循环,寻找与我们的观点相矛盾的证据
//假设。一旦佩林变假了,它就再也不会变真了。

对于(int i=0;i您应该跟踪字符串是否仍然有效,例如:

boolean palin = true;
for(int i =0 ; i < A.length()/2 ; i++) {
    if(A.charAt(i)!=A.charAt(A.length()-i-1)) {
        palin = false;
        break;
    }
}

if(palin) System.out.println("Is Palindrome");
else System.out.println("Is Not a Palindrome");
布尔佩林=true;
对于(int i=0;i
您应该跟踪字符串是否仍然有效,例如:

boolean palin = true;
for(int i =0 ; i < A.length()/2 ; i++) {
    if(A.charAt(i)!=A.charAt(A.length()-i-1)) {
        palin = false;
        break;
    }
}

if(palin) System.out.println("Is Palindrome");
else System.out.println("Is Not a Palindrome");
布尔佩林=true;
对于(int i=0;i
我会保留一个
布尔
标志(默认为
),如果不是,则设置为
。然后在循环后检查您的标志。类似

boolean palindrome = true;
for(int i = 0; i < (A.length() / 2); i++)
{
    if (A.charAt(i) != A.charAt(A.length() - i - 1)) {
        palindrome = false;
        break;
    }
}
if (palindrome) {
     System.out.println("palindrome");
} else {
    System.out.println("not palindrome");
}
,您可以用like替换循环

所以,它可以是一个像

System.out.println(new StringBuilder(A).reverse().toString().equals(A) 
       ? "palindrome" : "not palindrome");

我会保留一个
boolean
标志(默认为
true
),如果不是,则设置为
false
。然后在循环后检查您的标志。类似

boolean palindrome = true;
for(int i = 0; i < (A.length() / 2); i++)
{
    if (A.charAt(i) != A.charAt(A.length() - i - 1)) {
        palindrome = false;
        break;
    }
}
if (palindrome) {
     System.out.println("palindrome");
} else {
    System.out.println("not palindrome");
}
,您可以用like替换循环

所以,它可以是一个像

System.out.println(new StringBuilder(A).reverse().toString().equals(A) 
       ? "palindrome" : "not palindrome");

我喜欢上面给出的所有回答。但是,我认为您的代码将有以下问题: 1、它会考虑单个字符回文。 2.它不会将转子和转子识别为回文

我还为您添加了代码,以针对您的文件对您的方法进行基准测试。我认为这非常昂贵。因此,请重新考虑使用更好的算法

package algorithms;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class PalindromeAnalysis {

public static void main(String[] args) {
    Path p1 = Paths.get("/Users/droy/var/palindrome.txt");

    Scanner scan = null;
    try {
        scan = new Scanner(p1);
    } catch (IOException e) {
        e.printStackTrace();
    } 

    long st1 = System.currentTimeMillis();
    while (scan.hasNext()){
        String A = scan.next();
        boolean isPalindrome = true;
        try {
                if (A.length() <= 2) throw new Exception("Is not a Palindrome");

                for(int i =0; i<(A.length()/2);i++)
                { 
                    if (A.toUpperCase().charAt(i) != A.toUpperCase().charAt(A.length()-i-1)){
                        throw new Exception("Is not a Palindrome");
                    }
                }
        }
        catch (Exception e) {
            isPalindrome = false;
        }

        if (isPalindrome){
            System.out.println("This is Palindrome : " + A);
        }
        else {
            System.out.println("This is not Palindrome" + A);
        }
    }

    long et1 = System.currentTimeMillis();
    System.out.println("Time it took was:" + (et1 - st1) + " ms");
}
}
打包算法;
导入java.io.IOException;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.util.Scanner;
公共类回文分析{
公共静态void main(字符串[]args){
路径p1=Path.get(“/Users/droy/var/palindrome.txt”);
扫描仪扫描=空;
试一试{
扫描=新扫描仪(p1);
}捕获(IOE异常){
e、 printStackTrace();
} 
long st1=System.currentTimeMillis();
while(scan.hasNext()){
字符串A=scan.next();
布尔值isAlindrome=true;
试一试{

如果(A.length()我喜欢上面给出的所有响应。但是,我认为您的代码将有以下问题: 1、它会考虑单个字符回文。 2.它不会将转子和转子识别为回文

我还为您添加了代码,以针对您的文件对您的方法进行基准测试。我认为这非常昂贵。因此,请重新考虑使用更好的算法

package algorithms;

import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;

public class PalindromeAnalysis {

public static void main(String[] args) {
    Path p1 = Paths.get("/Users/droy/var/palindrome.txt");

    Scanner scan = null;
    try {
        scan = new Scanner(p1);
    } catch (IOException e) {
        e.printStackTrace();
    } 

    long st1 = System.currentTimeMillis();
    while (scan.hasNext()){
        String A = scan.next();
        boolean isPalindrome = true;
        try {
                if (A.length() <= 2) throw new Exception("Is not a Palindrome");

                for(int i =0; i<(A.length()/2);i++)
                { 
                    if (A.toUpperCase().charAt(i) != A.toUpperCase().charAt(A.length()-i-1)){
                        throw new Exception("Is not a Palindrome");
                    }
                }
        }
        catch (Exception e) {
            isPalindrome = false;
        }

        if (isPalindrome){
            System.out.println("This is Palindrome : " + A);
        }
        else {
            System.out.println("This is not Palindrome" + A);
        }
    }

    long et1 = System.currentTimeMillis();
    System.out.println("Time it took was:" + (et1 - st1) + " ms");
}
}
打包算法;
导入java.io.IOException;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.util.Scanner;
公共类回文分析{
公共静态void main(字符串[]args){
路径p1=Path.get(“/Users/droy/var/palindrome.txt”);
扫描仪扫描=空;
试一试{
扫描=新扫描仪(p1);
}捕获(IOE异常){
e、 printStackTrace();
} 
long st1=System.currentTimeMillis();
while(scan.hasNext()){
字符串A=scan.next();
布尔值isAlindrome=true;
试一试{

如果(A.长度()如果palin=false,您应该提前中断,以避免进一步检查字符串是否长,这可能会节省大量时间。让我们不要用新概念来压倒OP,好吗?是的。我知道。这就是我要问的。因为我不想重复整个字符串。我正在逐字符检查。我不确定我会用
palin
作为变量名。你们这些家伙真的很特立独行。你们想过用
drome
来代替吗?如果palin=false,你们应该早点休息,以避免进一步检查字符串是否长,这会节省大量时间。我们不要用新概念来压倒OP,好吗?是的……我知道.这就是我要问的。因为我不想重复整个字符串。我在逐字检查。我不确定我是否会使用
palin
作为变量名。你们真的很特立独行。是吗