在java中,我们应该使用什么原语或什么类型来表示电话号码?

在java中,我们应该使用什么原语或什么类型来表示电话号码?,java,types,Java,Types,在java中,什么类型可以包含像2023209999这样的数字? 您认为使用字符串类型来表示电话号码是一个好主意吗?如果您需要为international录制前导0或+,则应使用字符串。 如果你不担心这些,你可以用很长的时间。e、 g long phoneNumber = 2023209999L; // the L is for a long constant. 老实说,这取决于你打算用它做什么。如果你只是想把它存储起来,再打印一个字符串,或者甚至是一个长字符,假设我们处理的是美国的数字,那就

在java中,什么类型可以包含像2023209999这样的数字?
您认为使用字符串类型来表示电话号码是一个好主意吗?

如果您需要为international录制前导0或+,则应使用字符串。 如果你不担心这些,你可以用很长的时间。e、 g

long phoneNumber = 2023209999L; // the L is for a long constant.

老实说,这取决于你打算用它做什么。如果你只是想把它存储起来,再打印一个字符串,或者甚至是一个长字符,假设我们处理的是美国的数字,那就好了

如果您想做一些更复杂的事情,创建一个包含多个字符串的类,每个组件一个字符串


基本上,这里没有足够的信息来做出真正的决定。

使用
字符串
类型可以在不使用任何巫毒或施法的情况下分离电话号码


例如,如果您更改接受电话号码的格式,如果电话号码是
长的
,而不是
字符串
,使用字符串是一个非常好的主意,那么您必须做额外的工作,以使其连续。请记住,OOP的要点是不同类型的数据具有不同的使用模式。让我们看看电话号码模式

  • 我们是添加电话号码还是对其执行其他运算
  • 我们是否根据长度进行拆分,匹配部分内容,替换部分内容
第一个问题的答案是否定的,所以我们不会像操纵数字一样操纵它们。第二个问题的答案是肯定的,所以我们像操纵字符串一样操纵它们


现在,这里的许多人都在提倡让手机成为一门独立的课程。在这方面是有价值的,但我正在解决一个更紧迫的问题,那就是如何存储电话号码,这是你需要做的事情,无论电话是否是一个类别。将数据存储为数字的phone类不太合适。

我会编写一个PhoneNumber类,它使用字符串作为底层存储,并添加验证/漂亮的格式化功能。

另一件需要考虑的事情是:
int
太小。
int
可容纳的最大值为2147483647。就原语而言,
long
是最好的选择

我至少会说一个字符串,但就我个人而言,我会做一个PhoneNumber对象。这是一种为自己提供额外方法的东西,例如:

 boolean isValid();

 PhoneNumberUtils.getCountry(PhoneNumber number);
 PhoneNumberUtils.getState(PhoneNumber number);
……或者别的什么。我想做的一件事就是让人们输入电话号码,让系统了解其余内容。我讨厌输入可以由系统确定的数据。这正是我的喜好


在更简单的层面上,只需将字符串封装在PhoneNumber对象中,就可以为大脑提供一个句柄。。。在一周左右的时间里,当你的大脑想知道“这个电话号码方法应该去哪里?”时,你可能会发现自己有一个快速的答案。

这取决于你在做什么。假设您希望能够表示国际号码、本地号码、分支交换号码等。在这种情况下,字符串是一个错误的选择。它没有任何元信息。您可能需要一个类来表示电话号码


在这个类中,您可以使用BigInteger来表示电话号码(允许您拥有国际号码),或者更简单地说,您可以将电话号码的每一部分存储为一个长的。

我认为专门的电话号码类是解决这个问题的方法。电话号码不仅仅是字符串。首先也是最重要的是,电话号码遵守规则,例如:它们只包含数字,在美国它们可以包含7或10个数字。你需要一个构造器来确保你的电话号码是正确的

第二,一个类将使您能够轻松地对各种格式之间的差异进行排序。例如,555-4834和5554834是不同的字符串,但是相同的电话号码

最后,您可能希望诸如:getAreaCode()或getLocalNumber()之类的方法调用这样的方法比直接操作字符串更简洁、更不容易出错:

String phoneNumber pn = ....;
String localNumber = pn.length() == 7 ? pn : pn.substring(4) : 

在德国,区号以0开头,因此整数表示将丢失该信息

但我还是不建议只使用字符串。
而是使用Phonenumber类(或接口和实现)。这种方法有一些优点。
如果在某个时候发现字符串不足,您只需更改Phonenumber类,而不是更改使用Phonenumber的所有类。

此外,它还允许您在内部分离区号和电话号码。

已经很晚了,但我可以加上我的2美分

我从事电信行业,在使用可变长度的字符成员将电话号码存储在结构(或对象)中取得了最佳经验,即

struct TelephoneNumber (
    InternationalPrefix VARCHAR;
    AreaCode VARCHAR;
    Subscriber VARCHAR;
    Extension VARCHAR;)
我从不存储访问数字(零、双零、加号等),它们本身不属于电话号码,而是我可以称之为“拨号规则”的一部分

拨号规则的典型值为“00”、“0”,对于直拨线路为NULL,对于需要“0”才能接通线路的PBX为“000”、“00”、“0”

要“显示”数字,您可以自由设置对象的格式,插入连字符、括号或任何您喜欢的内容

要创建可拨号序列,我通过比较FROM和to号码的相应元素来确定类型(国际、国内或本地),并将拨号规则集中的相应字符串添加为前缀

这听起来似乎有些过分,但对于那些对数据完整性有着强烈要求并且与硬件有着紧密联系的国际应用程序,我没有想出更好的办法。当你想处理数字时,它消除了歧义和硬编码长度等的需要。从包含ISO国家代码、IATA城市代码及其相应前缀的国家/城市查找表中,也可以很容易地为结构的某些部分添加前缀

祝你好运
MikeD

我倾向于同意这一点
struct DialingRule (
    International VARCHAR;
    National VARCHAR;
    Local VARCHAR;)