如何在Java中比较字符串
在采访中,我遇到了这样一个问题:首先在LNAME中排序数组,然后在FNAME中排序,而不使用任何内置函数,比如(如何在Java中比较字符串,java,arrays,sorting,Java,Arrays,Sorting,在采访中,我遇到了这样一个问题:首先在LNAME中排序数组,然后在FNAME中排序,而不使用任何内置函数,比如(compare,compareTo,Collections.sort) 不幸的是,我对字符串进行了如下比较 String fname; String lname; for (int i = 0; i < NAMES.length; i++) { lname = NAMES[i][0]; for (int j = i + 1;
compare
,compareTo
,Collections.sort
)
不幸的是,我对字符串进行了如下比较
String fname;
String lname;
for (int i = 0; i < NAMES.length; i++) {
lname = NAMES[i][0];
for (int j = i + 1; j < NAMES.length; j++) {
if (NAMES[j][1] < lname) { // showing compilation error :(
}
}
}
字符串fname;
字符串名称;
for(int i=0;i
我知道这是错误的。那么,如果不使用任何内置函数,我如何比较它们呢
注意:我还没有添加完整的代码段。只是想知道,我们如何比较字符串。根据String.class compareTo(字符串s)方法说明如下。你可能可以参考下面的片段,但它同样不能满足你的要求,因为compareTo方法使用数学函数。但我相信这就是面试官想要的
public int compareTo(String s)
{
int i = value.length;
int j = s.value.length;
int k = Math.min(i, j);
char ac[] = value;
char ac1[] = s.value;
for(int l = 0; l < k; l++)
{
char c = ac[l];
char c1 = ac1[l];
if(c != c1)
return c - c1;
}
return i - j;
}
public int compareTo(字符串s)
{
int i=value.length;
int j=s.value.length;
int k=数学最小值(i,j);
字符ac[]=值;
char ac1[]=s.值;
对于(int l=0;l
这是一个很难回答的问题。它更像是一个学校作业;)
public void sort(){
字符串名[][]={{“Abse”,“Blase”},{“Gua”,“Blase”},{“Gua”,“Tysg”},{“Hysdt”,“Tyser”};
列表结果=新的ArrayList(3);
for(字符串[]名称:名称){
if(result.isEmpty()){
结果。添加(名称);
持续
}
int addAt=0;
对于(字符串[]sortedName:result){
if(isBefore(名称、分类名称)){
打破
}
addAt++;
}
结果。添加(地址、名称);
}
}
私有布尔值isBefore(字符串[]名称,字符串[]名称2){
//姓
int位置=0;
char[]lastName1=name[1].toLowerCase().toCharArray();
char[]lastName2=name2[1]。toLowerCase().toCharray();
while(lastName1.length>position&&lastName2.length>position){
if(lastName1[职位]lastName2[position]){
返回false;
}
位置++;
}
位置=0;
char[]firstName1=name[0]。toLowerCase().toCharArray();
char[]firstName2=name2[0]。toLowerCase().toCharray();
while(firstName1.length>position&&firstName2.length>position){
if(firstName1[职位]firstName2[position]){
返回false;
}
位置++;
}
//平等,所以不管怎样
返回false;
}
我有一种感觉,你可以用lambdas做这件事容易得多,但我真的不知道
运算符无法比较字符串,因此我们可以使用它来比较字符
也许可以实现您自己的字符串比较方法。它逐字符检查并返回具有最大值的字符串
public String compare(String s1, String s2)
{
for(int i = 0; i < Math.min(s1.length(), s2.length()); i++)
{
if(s1.charAt(i) > s2.charAt(i))
return s1;
}
return s2;
}
公共字符串比较(字符串s1、字符串s2)
{
对于(int i=0;is2.字符(i))
返回s1;
}
返回s2;
}
来完成你问题的答案
public class GreatString {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String NAMES[][] = { { "Abse", "Blase" }, { "Gua", "Tysg" },
{ "Hysdt", "Tyser" } };
int n = NAMES.length;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
if (NAMES[i][0].equals(NAMES[j][0])) {
if (compare(NAMES[i][1], NAMES[j][1])) {
String[] temp = NAMES[i];
NAMES[i] = NAMES[j];
NAMES[j] = temp;
} else {
if (compare(NAMES[i][0], NAMES[j][0])) {
String[] temp = NAMES[i];
NAMES[i] = NAMES[j];
NAMES[j] = temp;
}
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < NAMES[i].length; j++) {
System.out.println(NAMES[i][j]);}}
}
private static boolean compare(String str1, String str2) {
// TODO Auto-generated method stub
int len = str1.length() < str2.length() ? str1.length() : str2.length();
for (int i = 0; i < len; i++) {
if (str1.charAt(i) > str2.charAt(i))
return true;
}
return false;
}
}
公共类GreatString{
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
字符串名[][]={{“Abse”,“Blase”},{“Gua”,“Tysg”},
{“Hysdt”,“Tyser”};
int n=name.length;
对于(int i=0;istr2.字符(i))
返回true;
}
返回false;
}
}
您所说的“不使用任何内置功能”是什么意思?没有方法调用?我认为没有任何方法可以不使用方法访问字符串中的字符。您正在寻找String.compareTo()
@a_horse_,with_no_name不,他们提到不应该使用它,而不使用任何内置函数。您是指只使用直接比较字符串的函数,而不是像lowercase()、length()这样的函数吗,charAt()?
public String compare(String s1, String s2)
{
for(int i = 0; i < Math.min(s1.length(), s2.length()); i++)
{
if(s1.charAt(i) > s2.charAt(i))
return s1;
}
return s2;
}
public class GreatString {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String NAMES[][] = { { "Abse", "Blase" }, { "Gua", "Tysg" },
{ "Hysdt", "Tyser" } };
int n = NAMES.length;
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
if (NAMES[i][0].equals(NAMES[j][0])) {
if (compare(NAMES[i][1], NAMES[j][1])) {
String[] temp = NAMES[i];
NAMES[i] = NAMES[j];
NAMES[j] = temp;
} else {
if (compare(NAMES[i][0], NAMES[j][0])) {
String[] temp = NAMES[i];
NAMES[i] = NAMES[j];
NAMES[j] = temp;
}
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < NAMES[i].length; j++) {
System.out.println(NAMES[i][j]);}}
}
private static boolean compare(String str1, String str2) {
// TODO Auto-generated method stub
int len = str1.length() < str2.length() ? str1.length() : str2.length();
for (int i = 0; i < len; i++) {
if (str1.charAt(i) > str2.charAt(i))
return true;
}
return false;
}
}