当前位置: 首页 > 知识库问答 >
问题:

字符串比较或解析为Int?

桓宜
2023-03-14

我将保持这个简短。我正在编写一个模块,它需要比较作为字符串输入的两个大整数(注意:它们很大,但不足以超过Int64边界)。

字符串是填充的,因此选择是采取额外的步骤将其转换为等效的整数,还是将其作为字符串进行比较。

我正在做的是将它们中的每一个都转换为Int64并以这种方式进行比较。但是,我相信字符串比较也可以工作。鉴于我希望它尽可能高效,您对通过以下方式比较整数有什么看法:

string integer1 = "123";
string integer2 = "456";

if (Int64.Parse(integer1) <= Int64.Parse(integer2))

string integer1 = "123";
string integer2 = "456";

if (integer1.CompareTo(integer2) < 0)

共有3个答案

公冶和豫
2023-03-14

公平地说,这是否值得转换(解析)的成本。如果字符串。CompareTo非常有效,数字总是有一定的规模和格式。字符串比较要可靠,那么你可能会更好。您可以测量性能,但您会发现convert和int比较比字符串比较更快、更健壮。

*如果数字字符串的长度与前导0相等,则字符串比较有效。因此'003'、'020'和'100'将正确排序,但'3'、'20'和'100'不会。

冷俊健
2023-03-14

最好使用Int64。TryParse,因为这是一个字符串字段

string integer1 = "123";
string integer2 = "456";

long value1=0;
long value2=0;

long.TryParse(integer1 ,out value1); 
long.TryParse(integer2 ,out value2);

if(value1<=value2)
赵飞雨
2023-03-14

没有字符串比较将不起作用。您应该使用您的第一个版本,您必须将此字符串转换为解析它们的数字,然后比较数字。

最好看看这里,这里详尽地解释了CompareTo方法的功能。简而言之:

将当前实例与相同类型的另一个对象进行比较,并返回一个整数,该整数指示当前实例是在排序顺序中位于另一个对象之前、之后还是出现在同一位置。

因此,由于“123”和“456”是字符串,它们将一个字符串与另一个字符串进行比较,而不是将一个整数与另一个整数进行比较。

最后但并非最不重要的一点是,最好使用TryParse方法来解析数字,因为您的输入可能不是意外的整数。您使用它的方式相当简单:

Int64 value = 0;
Int64.Parse(integer1, out value1);

其中value e1是字符串integer1转换后获得的value e1。因此,对于您的两个值,您应该使用这个if语句:

if(Int64.TryParse(integer1, out value1) && Int64.TryParse(integer2, out value2)
{
    if(value1<=value2)
    {

    }
    else
    {

    }
}
else
{
    // Some error would have been happened to at least one of the two conversions.
}
 类似资料:
  • 问题内容: 我听说散列(即将字符串或对象转换为数字)用于字符串等,因为比较数字比字符串更容易。如果为真,这是什么原因? 问题答案: 不一定是这种情况,但大多数时候可能是这样。 请考虑以下情况: 我想比较字符串“ apples”和“ oranges”。如果我只想确定“ apples” ==“ oranges”,我只需要比较每个字符串的第一个字符:’a’!=’o’=>“ apples”!=“ oran

  • 主要内容:equals() 方法,equalsIgnoreCase() 方法,equals()与==的比较,compareTo() 方法字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。 在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。 equals() 方法 equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相

  • 给定一个包含逗号分隔列表的字符串,表示专有名词和类别/描述对,使用String.split()与模式和匹配器方法查找特定专有名词并提取相关联的类别/描述对的优缺点是什么? haystack字符串格式不会更改。它将始终包含PROPER_NOUNCATEGORY/DESCRIPTION形式的逗号分隔数据 两种方法的共同变量: 使用String.split(): 使用模式匹配器: 这两种方法都提供了我需

  • 问题内容: 在继续之前: 我知道我们应该使用.equals()比较内容。 我现在只是在谈论以下情况下的实际引用是否相同… 说我们有以下内容: 我认为应该是正确的,因为在字符串池中,对“字符串”的引用应该与str1和str2相同,现在都是“字符串”。它应该为true,但最终为 false 。 我尝试过,这次返回了 true 。然后我尝试了: 同样是 System.out.println(“ str”

  • 问题内容: 在Python中,如何将像这样的数字字符串解析为对应的浮点值?或者将字符串解析为整数31? 我只想知道如何将解析为,以及(分别)将解析为。 问题答案:

  • 问题内容: 我有一个Android应用程序,我想检查安装的应用程序名称是否与传递给包含此代码的函数的字符串匹配。代码和示例如下: 假设您打过电话,并且手机上的应用程序名称与返回的名称相同。但是,它永远不会。我记录了结果,它应该匹配,但事实并非如此。任何人都可以请问我为什么这行不通吗? 问题答案: 使用String的equals()方法代替==运算符来比较字符串: 在Java中,新手遇到的最常见错误